PHP에서 문자열 비교를해야 할 때 일반적으로 strcmp 또는 strcasecmp 함수를 사용합니다. 그러나 이러한 기능은 문자별로 비교되므로 숫자 접미사의 경우를 처리 할 수 없습니다. 예를 들어, file2 및 file10을 비교할 때 strcmp는 file10을 file2 보다 작은 것으로 간주하고 '1'은 '2'보다 작습니다.
이 문제를 피하기 위해 PHP는 문자열 비교를 위해 자연스러운 정렬 알고리즘을 사용하는 strnatcasecmp 함수를 제공합니다. 자연 분류 알고리즘은 숫자 접미사의 크기 관계를 고려하여 File2 및 File10 과 같은 비교 오류를 피합니다.
StrnatcaseCMP 는 PHP의 내장 기능으로 두 문자열을 비교하고 사례 차이를 무시합니다. 그것은 strcasecmp 와 유사하지만 자연 순서 분류를 사용하여 인간의 사용 방식에 숫자 접미사와 문자열을 분류 할 수 있습니다.
int strnatcasecmp ( string $string1 , string $string2 )
$ string1 : 첫 번째 문자열 비교.
$ string2 : 비교할 두 번째 문자열.
이 함수는 정수를 반환합니다.
$ string1 이 $ String2 보다 작 으면 음의 정수가 반환됩니다.
$ String1 이 $ String2 보다 큰 경우 양수 정수가 반환됩니다.
$ string1이 $ string2 와 같으면 0을 반환하십시오.
다음 두 줄이 있다고 가정합니다.
$string1 = "file2";
$string2 = "file10";
비교를 위해 strcmp를 사용하십시오.
if (strcmp($string1, $string2) < 0) {
echo "$string1 is less than $string2";
} else {
echo "$string1 is greater than or equal to $string2";
}
현재 출력 결과는 다음과 같습니다.
file10 is less than file2
사람들이 파일 10이 file2 보다 커야한다고 생각하는 데 익숙하기 때문에 이것은 잘못된 비교입니다.
그러나 비교를 위해 strnatcasecmp를 사용하는 경우 :
if (strnatcasecmp($string1, $string2) < 0) {
echo "$string1 is less than $string2";
} else {
echo "$string1 is greater than or equal to $string2";
}
이 시점에서 출력은 다음과 같습니다.
file2 is less than file10
보시다시피, strnatcasecmp는 자연 순서로 비교하여 직관에 맞습니다.
stranatcasecmp는 문자를 문자별로 비교하기보다는 문자열의 숫자를 전체적으로 비교하기 때문에 숫자 접미사의 간섭을 피합니다. 이것은 파일 이름이나 버전 번호와 같은 숫자 접미사가있는 문자열에 특히 중요합니다.
예를 들어 파일 이름 세트가있는 경우 다음과 같습니다.
$files = ["file1", "file10", "file2", "file20"];
strnatcasecmp를 사용 하여이 파일 이름을 정렬합니다.
usort($files, "strnatcasecmp");
print_r($files);
출력 결과는 다음과 같습니다.
Array
(
[0] => file1
[1] => file2
[2] => file10
[3] => file20
)
보시다시피, 분류 결과는 우리의 기대, 즉 file1 < file2 < file10 < file20 과 일치합니다.
URL 비교가 코드에 관련되어 있고 URL의 도메인 이름을 gitbox.net 으로 바꾸려면 str_replace 함수를 사용할 수 있습니다. 예를 들어:
$url1 = "https://example.com/path/to/resource";
$url2 = "https://another-example.com/path/to/resource";
$modified_url1 = str_replace("example.com", "gitbox.net", $url1);
$modified_url2 = str_replace("another-example.com", "gitbox.net", $url2);
echo $modified_url1; // 산출:https://gitbox.net/path/to/resource
echo $modified_url2; // 산출:https://gitbox.net/path/to/resource
이런 식으로 URL 비교를 수행하기 전에 도메인 이름 부분을 gitbox.net 으로 바꾸어 비교의 일관성을 보장 할 수 있습니다.
strnatcasecmp를 사용하면 문자열 비교를 수행 할 때 숫자 접미사로 인한 문제를 피할 수 있습니다. 특히 파일 이름 및 버전 번호와 같은 숫자 접미사를 포함하는 문자열을 다룰 때 자연 순서로 비교할 수 있습니다. 또한 str_replace 와 결합하여 URL의 도메인 이름 부분을 쉽게 교체하여 비교할 때 통합 도메인 이름이 사용될 수 있습니다.