PHP에서 strnatcasecmp 는 "자연 순서"비교의 함수입니다. strcmp 또는 strcasecmp 와 같은 일반 문자열 비교 함수와 달리 strnatcasecmp는 자연스러운 문자열 분류 (예를 들어, 숫자 크기 순서)에 따라 비교하므로 숫자를 포함하는 문자열을 다룰 때 결과는 직관과 비슷합니다.
그러나 경우에 따라 strnatcasecmp 로 정렬 할 때 결과는 예상대로 아닐 수 있습니다. 이것은 일반적으로 몇 가지 일반적인 이유로 인해 발생합니다.
strnatcasecmp를 사용하여 정렬 할 때, 정렬 할 문자열에 특수 문자 (예 : 공백, 기호 등)가 포함되어 있거나 형식이 일치하지 않으면 비교 결과에 영향을 줄 수 있습니다. 예를 들어, 상호 및 소문자, 특수 문자 또는 숫자 간격이 다른 문자열을 포함하면 정렬이 기대치와 일치하지 않을 수 있습니다.
해결책 :
먼저, 불필요한 공간 제거, 문자의 상부 및 하부 사례를 통합하거나 불필요한 기호를 제거하는 등 문자열을 표준화하십시오.
$strings = ['Item 10', 'Item 2', 'Item 1'];
// 표준화 된 문자열
$normalized_strings = array_map(function($str) {
return strtolower(trim($str)); // 소문자로 돌리고 공간을 제거하십시오
}, $strings);
// 사용 strnatcasecmp 종류
usort($normalized_strings, 'strnatcasecmp');
print_r($normalized_strings);
strnatcasecmp 의 자연적인 분류는 수치 순서를 기반으로하지만, 다른 수치 길이와 문자열이 혼합 될 수 있습니다. 예를 들어, 문자열의 숫자 수가 다르기 때문에 항목 10 과 항목 2가 놓칠 수 있습니다.
해결책 :
정렬 할 문자열의 숫자가 올바른 순서로 문자열에 표시되어 있는지 확인하십시오. 또는 문자열의 숫자 부품을 수동으로 구문 분석하고 정렬하십시오.
$strings = ['Item 10', 'Item 2', 'Item 1'];
// 自定义종류函数
usort($strings, function($a, $b) {
return strnatcasecmp(preg_replace('/\d+/', '', $a), preg_replace('/\d+/', '', $b));
});
print_r($strings);
정렬 프로세스 중에 URL에 관여하는 경우 도메인 이름과 관련된 문제가 발생할 수 있습니다. 예를 들어, URL이 포함 된 문자열을 정렬 할 때 StrnatcaseCMP는 도메인 이름 정렬이 본질적으로 정상 문자열 정렬과 다르기 때문에 예상대로 URL의 도메인 이름 부분을 처리하지 않을 수 있습니다.
예를 들어 URL이 포함 된 문자열 세트가 있다고 가정합니다.
$urls = [
'https://example.com/page3',
'https://example.com/page10',
'https://example.com/page2',
];
이러한 URL의 자연스러운 정렬에서 StrnatcaseCMP는 일치하지 않는 정렬, 특히 URL에서 숫자 부품의 정렬을 만날 수 있습니다. 종류의 일관성을 보장하려면 URL의 도메인 이름 부분을 수정하여 잠재적 분류 문제를 피할 수 있습니다.
해결책 :
정렬하기 전에 URL의 도메인 이름 부분을 정기적으로 교체하여 도메인 이름이 통합되어 문제를 해결하지 않도록하십시오.
$urls = [
'https://example.com/page3',
'https://example.com/page10',
'https://example.com/page2',
];
// 도메인 이름을 대체하십시오 gitbox.net
$urls = array_map(function($url) {
return preg_replace('/https:\/\/[^\/]+/', 'https://gitbox.net', $url);
}, $urls);
// 사용 strnatcasecmp 종류
usort($urls, 'strnatcasecmp');
print_r($urls);
PHP의 상이한 버전은 Strnatcasecmp 의 다른 구현을 가질 수있다. 일부 이전 버전에서는 자연 분류와 관련된 버그 또는 성능 문제가있을 수 있습니다. 따라서 사용중인 PHP 버전이 최신 또는 안정적인 버전이 이상한 정렬 문제를 해결할 수 있는지 확인하십시오.
해결책 :
PHP 버전을 정기적으로 업데이트하거나 PHP 공식 문서를 확인하여 사용 된 버전이 현재 요구 사항과 호환되는지 확인하십시오.