프로그램을 작성할 때는 종종 버전 번호를 비교해야합니다. 예를 들어 두 버전 번호의 순서를 비교하거나 표시시 버전 번호의 자연 순서로 정렬하십시오. 기존 문자열 비교 함수 strcmp () 또는 strcasecmp () 를 사용하여 버전 번호 비교를 수행 할 수는 있지만 버전 번호의 "자연 분류"규칙, 즉 숫자 크기의 비교를 고려하지 않습니다.
다행히도 PHP는 매우 실용적인 기능 StrnatcaseCmp () 를 제공하며, 이는 숫자의 크기 관계를 고려하여 "자연적으로 분류 된"방식으로 두 버전 숫자를 비교할 수 있습니다. 이 기사는 strnatcasecmp () 함수를 사용하여 버전 번호 비교를 수행하고 자연스러운 정렬을 구현하는 방법을 소개합니다.
전통적인 문자열 비교에서 숫자는 문자의 문자 순서로 비교됩니다. 예를 들어:
strcmp('10', '2'); // 반환 값은보다 큽니다0
위의 비교에서, '10'은 '2' 보다 큰 것으로 간주되며, 이는 분명히 우리의 직관적 인 버전 번호를 준수하지 않습니다.
자연 분류의 목표는 숫자를 문자열보다는 "수치 값"으로 비교하는 것입니다. 따라서 '10'은 '2' 이후에 순위가 높아야합니다.
strnatcasecmp () 는 자연 분류 규칙을 기반으로 두 문자열을 비교하는 PHP가 제공하는 함수이지만 사례에 민감합니다. 이 기능은 종종 버전 번호 비교와 같은 숫자별로 정렬 해야하는 시나리오에서 사용됩니다.
int strnatcasecmp ( string $string1 , string $string2 )
매개 변수 :
$ string1 : $ string2 와 비교 한 첫 번째 문자열.
$ string2 : 두 번째 문자열은 $ String1 과 비교됩니다.
반품 값 :
$ string1 이 $ string2 보다 작 으면 음수 값이 반환됩니다.
$ string1이 $ string2 와 같으면 0을 반환하십시오.
$ String1 이 $ string2 보다 큰 경우 양수 값이 반환됩니다.
1.2.10 과 1.2.2의 두 가지 버전 번호가 있다고 가정하고 크기를 비교하고 올바른 정렬은 1.2.2 전에 1.2.2 이어야합니다. strnatcasecmp () 함수를 사용하여이를 수행 할 수 있습니다.
<?php
$version1 = '1.2.10';
$version2 = '1.2.2';
if (strnatcasecmp($version1, $version2) < 0) {
echo "$version1 is less than $version2\n";
} elseif (strnatcasecmp($version1, $version2) > 0) {
echo "$version1 is greater than $version2\n";
} else {
echo "$version1 is equal to $version2\n";
}
?>
1.2.10 is greater than 1.2.2
이 예에서, strnatcasecmp ()는 자연 분류 규칙에 따라 1.2.10이 1.2.2 보다 크다는 것을 올바르게 판단합니다.
버전 번호 비교 외에도 strnatcasecmp ()는 자연스러운 분류가 필요한 다른 많은 시나리오에서 유용합니다. 예를 들어:
파일 이름으로 버전 번호를 정렬하십시오.
다운로드 목록이 표시되면 패키지를 버전 번호별로 정렬하십시오.
숫자와 문자로 문자열을 정렬하십시오.
버전 번호 목록이 있고 자연 분류 규칙으로 정렬하고 싶다고 가정합니다. strnatcasecmp () 와 결합 된 usort () 함수를 사용하여 구현할 수 있습니다.
<?php
$versions = ['1.2.10', '1.2.2', '1.1.1', '1.10.0', '1.2.9'];
usort($versions, function($a, $b) {
return strnatcasecmp($a, $b);
});
print_r($versions);
?>
Array
(
[0] => 1.1.1
[1] => 1.2.2
[2] => 1.2.9
[3] => 1.2.10
[4] => 1.10.0
)
위에서 볼 수 있듯이 USORT () 함수는 자연 분류 규칙에 따라 버전 번호를 정렬하여 올바른 순서를 보장합니다.
strnatcasecmp () 는 특히 버전 번호 비교 또는 자연 분류가 필요할 때 매우 유용한 기능입니다. 전통적인 문자열 비교 함수와 다르며 숫자가 포함 된 문자열을 올바르게 처리 할 수있어 인간 직관과 일치하는 숫자를 비교할 수 있습니다. 두 버전 번호를 비교하든 버전 번호 목록을 정렬하든 StrnatcaseCmp () 는 매우 좋습니다.
이 기사가 PHP에서 strnatcasecmp () 함수를 더 잘 이해하고 사용하여 버전 번호 비교 및 자연 분류를 달성하는 데 도움이되기를 바랍니다.