PHP에서는 종종 현을 정렬하거나 비교해야합니다. 자연 분류 시나리오에서 Strnatcasecmp 와 strcoll은 일반적으로 사용되는 문자열 비교 함수입니다. 둘 다 문자열을 비교하는 데 사용되지만 처리 방식이 다소 다릅니다. 오늘 우리는이 두 기능을 자세히 비교하여 자연스러운 문자열 분류의 요구를 처리하기위한 올바른 기능을 선택하는 데 도움이됩니다.
strnatcasecmp :
strnatcasecmp 는 PHP의 함수로 "자연적인 정렬"방식으로 두 줄을 비교합니다. 소위 "자연 분류"는 문자열의 숫자가 문자뿐만 아니라 숫자로 취급 될 것임을 의미합니다. 비교 방법은 사례를 무시하므로 문자 비교에서는 사례가 정렬에 영향을 미치지 않습니다.
문법:
int strnatcasecmp ( string $str1 , string $str2 )
반품 값 :
$ str1이 $ str2 미만인 경우 음수가 반환됩니다.
$ str1이 $ str2 와 같으면 0을 반환하십시오.
$ str1 이 $ str2 보다 큰 경우 양수가 반환됩니다.
예:
$str1 = "file10";
$str2 = "file2";
echo strnatcasecmp($str1, $str2); // 출력 음수,왜냐하면 "file10" 자연 순서로 순위 "file2" 앞쪽
strcoll :
Strcoll은 현재 로케일 설정을 기반으로 두 줄을 비교합니다. 문자열 비교에 현지화 된 규칙을 사용하므로 결과는 다른 지역에 따라 다를 수 있습니다. 언어와 문화적 차이를 고려해야하는 시나리오를 정렬하는 데 적합합니다.
문법:
int strcoll ( string $str1 , string $str2 )
반품 값 :
$ str1이 $ str2 미만인 경우 음수가 반환됩니다.
$ str1이 $ str2 와 같으면 0을 반환하십시오.
$ str1 이 $ str2 보다 큰 경우 양수가 반환됩니다.
예:
setlocale(LC_COLLATE, 'en_US.UTF-8'); // 지역 설정
$str1 = "apple";
$str2 = "banana";
echo strcoll($str1, $str2); // 출력 음수,왜냐하면 "apple" 알파벳 순서 "banana" 앞쪽
정렬 :
StrnatcaseCMP는 "천연 분류"방법을 사용하며 숫자는 상단 및 소문을 무시하고 정렬 숫자로 취급됩니다.
Strcoll은 시스템의 로케일 설정을 기반으로 문자열을 비교하고 분류 규칙은 다른 언어와 문화적 습관에 따라 다릅니다.
시나리오 사용 :
자연 분류를하고 싶다면 특히 숫자가 포함 된 문자열을 비교할 때 strnatcasecmp가 더 적절합니다. 예를 들어, 파일 이름을 비교하려면 "file1"및 "file10"과 같은 문자열을 자연 순서로 정렬 해야하는 다음 strnatcasecmp가 더 나은 선택입니다.
현장별로, 특히 다국어 컨텐츠를 다룰 때 현악기를 비교 해야하는 경우 Strcoll 은 더 적합한 기능입니다. 예를 들어, 문자열이 로케일 (영어 또는 프랑스어)별로 정렬되기를 원할 때 Strcoll 이 더 유연합니다.
성능 차이 :
StrnatcaseCMP는 문자열의 구문 분석이 필요하기 때문에 자연스러운 정렬을 수행 할 때 처리하는 데 약간 느리게 진행될 수 있습니다.
Strcoll은 현재 로케일에 따라 정렬되므로 성능은 로케일의 영향을받을 수 있지만 일반적으로 더 효율적입니다.
// 사용 strnatcasecmp 자연스러운 분류를하십시오
$file1 = "file10";
$file2 = "file2";
echo strnatcasecmp($file1, $file2); // 출력 음수,file10 존재하다 file2 전에
// 사용 strcoll 로케일 설정 분류
setlocale(LC_COLLATE, 'en_US.UTF-8');
echo strcoll("apple", "banana"); // 출력 음수,왜냐하면 apple 排존재하다 banana 앞쪽
문자열을 정렬 할 때 StrnatcaseCMP는 "자연 순서"로 문자열을 비교 해야하는 경우, 특히 문자열에 숫자가 포함 된 경우 더 적합한 선택입니다. 숫자 분류의 요구를 더 잘 이해할 수 있습니다. 반면에 Strcoll은 언어 로케일별로 정렬 해야하는 시나리오, 특히 여러 언어를 정렬해야 할 때 더 적합합니다.
따라서 선택할 기능은 실제 요구에 따라 다릅니다. 언어 교차 문자열 분류를 원한다면 strcoll이 더 나을 수 있습니다. StrnatcaseCMP는 자연 분류에만 관심이있는 경우, 특히 숫자에 정렬이 포함 된 경우 더 적용 할 수 있습니다.