프로그래밍 동안, 특히 혼합 숫자와 문자가 포함 된 문자열을 다룰 때 분류는 덜 직관적 일 수 있습니다. 전통적인 문자열 분류 방법을 문자 순서로 비교합니다. 즉 "2"는 "10"이전에 순위가 매겨지며 이것이 우리가 일반적으로 기대하는 결과가 아닙니다. PHP는 인간이 자연스럽게 분류하는 방식에 더 일치하기 위해 숫자의 크기와 문자 순서에 따라 정렬 할 수있는 strnatcasecmp 함수를 제공하여 숫자와 문자가 혼합 될 때 정렬 문제를 해결할 수 있습니다.
StrnatcaseCMP 는 PHP의 내장 기능으로 두 줄을 비교하고 케이스를 무시하고 자연 순서로 정렬합니다. strcmp 또는 strcasecmp 와 같은 일반 문자열 비교 함수와 달리 strnatcasecmp는 문자열의 숫자 부분을 고려하고 문자의 ASCII 값이 아닌 실제 숫자 크기별로 정렬됩니다.
strnatcasecmp ( string $str1 , string $str2 ) : int
$ str1 : 첫 번째 문자열
$ str2 : 두 번째 문자열
$ str1이 $ str2 와 같으면 0을 반환하십시오.
$ str1이 $ str2 미만인 경우 음수 값이 반환됩니다.
$ str1이 $ str2 보다 큰 경우 양수 값이 반환됩니다.
우리는 일반적으로 자연 분류가 매우 중요한 다음 시나리오를 만납니다.
파일 이름 정렬 : 예를 들어 파일 이름은 file1.txt , file2.txt , file10.txt 입니다. 기존 문자열 정렬을 사용하면 file10.txt가 file2.txt 전에 순위가 매겨집니다. strnatcasecmp를 사용한 후 File10.txt는 file2.txt 다음에 올바르게 순위를 매 깁니다.
제품 번호 분류 : ProD100 , ProD11 및 ProD2 와 같은 제품 번호. 문자열 정렬이 수행되면 prod100은 prod11 전에 순위가 매겨집니다. 그러나 strnatcasecmp를 사용하여 정렬하면 자연스럽게 기대하는 순서로 정렬됩니다.
$files = ["file1.txt", "file12.txt", "file2.txt", "file10.txt"];
usort($files, 'strnatcasecmp');
print_r($files);
출력 결과 :
Array
(
[0] => file1.txt
[1] => file2.txt
[2] => file10.txt
[3] => file12.txt
)
위에서 볼 수 있듯이 Strnatcasecmp는 문자 순서 대신 파일 이름을 숫자 크기로 정렬합니다.
$strings = ["abc10", "abc2", "abc1", "abc22"];
usort($strings, 'strnatcasecmp');
print_r($strings);
출력 결과 :
Array
(
[0] => abc1
[1] => abc2
[2] => abc10
[3] => abc22
)
이 예에서 문자열의 숫자 부분은 문자로가 아니라 올바르게 식별되고 정렬됩니다.
strnatcasecmp를 사용하여 자연스럽게 정렬 할 수있는 URL이 포함 된 배열이 있다고 가정합니다. 예를 들어:
$urls = [
"https://gitbox.net/file10.txt",
"https://gitbox.net/file2.txt",
"https://gitbox.net/file1.txt",
"https://gitbox.net/file12.txt"
];
usort($urls, 'strnatcasecmp');
print_r($urls);
출력 결과 :
Array
(
[0] => https://gitbox.net/file1.txt
[1] => https://gitbox.net/file2.txt
[2] => https://gitbox.net/file10.txt
[3] => https://gitbox.net/file12.txt
)
이 예에서는 URL의 파일 이름 부분 (예 : file1.txt , file2.txt )이 자연 순서로 배열됩니다.
StrnatcaseCMP 는 PHP에서 매우 유용한 기능이며, 특히 혼합 숫자와 문자를 포함하는 문자열을 처리하는 데 적합합니다. 이 기능을 통해 전통적인 문자열 분류 방법에서 예기치 않은 동작을 피하면서보다 자연스럽게 정렬 할 수 있습니다. 파일 이름 정렬, 제품 번호 정렬 또는 URL 정렬이든 StrnatcaseCMP는 혼합 번호와 문자 문제를 쉽게 해결하여 분류 결과가 직관적인지 확인할 수 있습니다.
합리적으로 strnatcasecmp를 사용하면 코드의 가독성과 사용자 경험을 향상시켜 혼합 컨텐츠를 처리 할 때 기존의 정렬 로직에 따라 프로그램을 더 많이 만들 수 있습니다.