현재 위치: > 최신 기사 목록> StrnatcaseCMP와 다른 상류 및 하위 사례와 국제화 된 문자열을 비교하는 방법은 무엇입니까?

StrnatcaseCMP와 다른 상류 및 하위 사례와 국제화 된 문자열을 비교하는 방법은 무엇입니까?

gitbox 2025-05-26

PHP 개발에서 문자열 비교는 가장 일반적인 작업 중 하나입니다. 특히 사용자 입력, 파일 이름 정렬 또는 검색 기능을 구현할 때 문자열을 다른 상류 및 하위 케이스, 특히 국제 문자를 포함하는 문자열과 정확하게 비교하는 방법은 무시할 수없는 문제입니다. strnatcasecmp 함수는이 자연 순서, 사례에 민감한 문자열 비교를 위해 특별히 설계된 도구입니다.

strnatcasecmp 란 무엇입니까?

strnatcasecmp 는 PHP가 두 줄을 비교하기 위해 제공하는 내장 함수입니다. 그것의 비교 방법은 "자연 순서"에 있으며 대소 문자를 사용하지 않습니다. 이것은 예를 들어 인간 습관적으로 이해하는 순서대로 비교할 수 있음을 의미합니다.

 echo strnatcasecmp("image1.jpg", "Image10.jpg");

위의 코드는 "1"이 "10"이전이기 때문에 image1.jpgimage10.jpg 보다 적다는 것을 나타내는 음수를 반환합니다.

기본 구문 :

 int strnatcasecmp(string $string1, string $string2)
  • 반환 값은 정수입니다.

    • <0 : String1String2 보다 작습니다

    • = 0 : 두 줄은 동일합니다

    • > 0 : String1String2 보다 큽니다

strnatcasecmp가 strnatcasecmp 보다 "자연 순서"에 더 적합한 이유는 무엇입니까?

표준 strcasecmp는 문자열의 숫자의 의미에 관계없이 문자 문자의 ASCII 값을 문자별로 비교합니다. strnatcasecmp는 "자연 분류"를 채택합니다. 즉, 문자열의 숫자를 전체적으로 처리합니다. 예를 들어:

 var_dump(strcasecmp("file2.txt", "file10.txt")); // 반품 > 0
var_dump(strnatcasecmp("file2.txt", "file10.txt")); // 반품 < 0

이렇게하면 strnatcasecmp가 특히 파일 이름, 버전 번호 등과 같은 숫자와 문자열 비교에 적합합니다.

국제화 된 문자열을 다루는 방법?

strnatcasecmp는 ASCII 문자의 경우를 올바르게 처리하지만 국제 캐릭터 (예 : 디아크리트 노트가있는 라틴어 문자, 비 라틴 문자 등)와 관련하여 "완전한 국제적"지원은 없습니다. 즉, 일부 다중 바이트 문자의 경우 예상대로 작동하지 않을 수 있습니다.

예를 들어:

 echo strnatcasecmp("café", "CAFé");

이 비교는 PHP의 기본 문자 인코딩 및 내부 구현에 따라 두 줄을 동일하게 고려하지 않을 수 있습니다.

대안 : Intl 확장자와의 콜라터

진정으로 국제적으로 언어에 민감한 분류 행동이 필요한 경우 PHP의 INTL 확장에서 Collator 클래스를 사용할 수 있습니다.

 $collator = new Collator('fr_FR');
echo $collator->compare("café", "CAFé"); // 산출 0,평등을 나타냅니다

Collator는 여러 언어와 로케일을 지원하여 국제 캐릭터를 더 잘 처리 할 수 ​​있습니다.

실제 응용 프로그램의 예

사용자가 다른 사례가있는 파일 이름을 업로드 할 수 있고 숫자가있을 수 있음을 고려할 때 웹 사이트에서 업로드 된 파일 이름을 정렬한다고 가정하십시오. 다음은 strnatcasecmp를 사용하는 샘플 코드입니다.

 $files = ["image10.jpg", "Image2.jpg", "image1.JPG", "Image20.jpg"];

usort($files, function($a, $b) {
    return strnatcasecmp($a, $b);
});

foreach ($files as $file) {
    echo "<a href='https://gitbox.net/uploads/{$file}'>{$file}</a><br>";
}

출력 결과는 다음과 같습니다.

 image1.JPG
Image2.jpg
image10.jpg
Image20.jpg

분류 결과는 인간의 자연 습관과 일치하고 파일 이름의 경우를 무시한다는 것을 알 수 있습니다.

요약

  • StrnatcaseCMP는 사례 감도없이 문자열을 "자연 순서"로 비교하기위한 강력하고 실용적인 도구입니다.

  • 파일 이름, 레이블, 버전 번호 등과 같은 숫자가있는 문자열에 특히 적합합니다.

  • 국제 캐릭터를 포함하는 비교를 위해서는 strnatcasecmp가 이상적이지 않을 수 있으며 현재 Intl 확장 된 콜레이터를 사용하는 것이 좋습니다.

strnatcasecmp 의 사용을 마스터하면 사용자 입력 및 논리를보다 자연스럽게 처리하는 데 도움이되므로 PHP 응용 프로그램이 더 현명하고 사용자 친화적입니다.