현재 위치: > 최신 기사 목록> PHP의 strnatcmp 함수를 사용하여 문자열을 자연스럽게 정렬하는 방법은 무엇입니까? 실제 방법에 대한 자세한 설명

PHP의 strnatcmp 함수를 사용하여 문자열을 자연스럽게 정렬하는 방법은 무엇입니까? 실제 방법에 대한 자세한 설명

gitbox 2025-09-16

PHP의 strnatcmp 함수를 사용하여 문자열을 자연스럽게 정렬하는 방법은 무엇입니까? 실제 방법에 대한 자세한 설명

개발 중에는 종종 문자열 세트를 정렬해야합니다. 전통적인 분류 방법은 종종 사전 순서로 문자열을 분류하며 때로는 분류 결과가 "자연 분류"규칙을 준수하기를 원합니다. PHP는 자연 분류를 구현하는 데 도움이되는 매우 유용한 기능 strnatcmp ()를 제공합니다.

자연 분류 란 무엇입니까?

이름에서 알 수 있듯이 자연 분류는 인간에 대한 기존의 이해에 따라 데이터를 분류하는 것을 말합니다. 예를 들어, 파일 이름을 정렬 할 때 "File10"은 사전 순서에서 첫 번째가 아닌 "File2"가이어야합니다. 전통적인 사전 분류 규칙은 "1"이 "2"보다 작기 때문에 "file10"순위는 "File10"순위는 "2"보다 작고 자연 분류는 숫자 크기별로 정렬됩니다.

strnatcmp () 함수 소개

PHP의 strnatcmp () 함수는 두 줄을 비교하기위한 자연적인 분류 함수입니다. strcmp () 와 유사하지만 strnatcmp ()는 문자열의 숫자 부분을보다 지능적으로 처리하여 사람과 같은 분류 규칙을 가능하게합니다.

기능 프로토 타입 :

 <span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-title function_ invoke__">strnatcmp</span></span><span> ( </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$str1</span></span><span> , </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$str2</span></span><span> )
</span></span>
  • $ str1$ str2 :이 두 매개 변수는 비교해야 할 두 개의 문자열입니다.

  • 반환 값 : $ str1이 $ str2 전에 순위가 매겨지면 음의 정수를 반환합니다. $ str1이 $ str2 와 같으면 0을 반환합니다. $ str1이 $ str2 이후에 순위가 매겨지면 양수 정수를 반환합니다.

strnatcmp () 의 작동 방식

기존 문자열 비교 함수와 달리 strnatcmp ()는 문자열의 숫자 부분을 구문 분석하고 실제 숫자 크기에 따라 비교합니다. 비교 결과가 결정될 때까지 문자열의 각 부분을 하나씩 비교합니다.

예를 들어, "file10""file2"를 비교할 때 strnatcmp ()는 먼저 문자 부분 "파일" 을 비교 한 다음 숫자 파트 102를 계속 비교합니다. 102 보다 크기 때문에 "File10"은 "File2" 뒤에 순위가 매겨집니다.

예 : 자연 분류에 strnatcmp ()를 사용하는 방법

strnatcmp ()를 사용하여 파일 이름 세트를 자연스럽게 정렬 할 수 있습니다. 코드는 다음과 같습니다.

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// 정렬 할 문자열 배열</span></span><span>
</span><span><span class="hljs-variable">$fileNames</span></span><span> = [</span><span><span class="hljs-string">'file2.txt'</span></span><span>, </span><span><span class="hljs-string">'file10.txt'</span></span><span>, </span><span><span class="hljs-string">'file1.txt'</span></span><span>, </span><span><span class="hljs-string">'file12.txt'</span></span><span>, </span><span><span class="hljs-string">'file11.txt'</span></span><span>];

</span><span><span class="hljs-comment">// 사용usort()결합strnatcmp()자연스러운 분류를하십시오</span></span><span>
</span><span><span class="hljs-title function_ invoke__">usort</span></span><span>(</span><span><span class="hljs-variable">$fileNames</span></span><span>, </span><span><span class="hljs-string">'strnatcmp'</span></span><span>);

</span><span><span class="hljs-comment">// 출력 정렬 결과</span></span><span>
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$fileNames</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$file</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$file</span></span><span> . PHP_EOL;
}
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

출력 결과 :

 <span><span>file1.txt
file2.txt
file10.txt
file11.txt
file12.txt
</span></span>

이 예에서는 먼저 파일 이름이 포함 된 배열을 작성한 다음 usort () 함수를 사용하여 배열을 strnatcmp () 로 자연스럽게 정렬합니다. 정렬 된 배열은 우리가 기대하는 순서와 일치하고 숫자 부품의 크기가 정렬됩니다.

기타 관련 기능

strnatcmp () 외에도 php는 strnatcasecmp ()를 제공하는데, 이는 strnatcmp () 함수와 유사하지만 strnatcasecmp ()는 비교할 때의 경우 차이를 무시합니다.

예:

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// 忽略大小写자연스러운 분류를하십시오</span></span><span>
</span><span><span class="hljs-variable">$fileNames</span></span><span> = [</span><span><span class="hljs-string">'File2.txt'</span></span><span>, </span><span><span class="hljs-string">'file10.txt'</span></span><span>, </span><span><span class="hljs-string">'File1.txt'</span></span><span>, </span><span><span class="hljs-string">'file12.txt'</span></span><span>, </span><span><span class="hljs-string">'file11.txt'</span></span><span>];
</span><span><span class="hljs-title function_ invoke__">usort</span></span><span>(</span><span><span class="hljs-variable">$fileNames</span></span><span>, </span><span><span class="hljs-string">'strnatcasecmp'</span></span><span>);

</span><span><span class="hljs-comment">// 출력 정렬 결과</span></span><span>
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$fileNames</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$file</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$file</span></span><span> . PHP_EOL;
}
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

출력 결과 :

 <span><span>File1.txt
File2.txt
file10.txt
file11.txt
file12.txt
</span></span>

결론적으로

strnatcmp ()strnatcasecmp ()를 사용하면 숫자를 자연스럽게 포함하는 문자열을 쉽게 정렬하여 분류 결과가 인간 직관과 일치하도록합니다. 이러한 기능은 파일 이름 분류, 버전 번호 비교 등과 같은 시나리오에 매우 적합합니다.

이 기사가 자연 분류 기능과 PHP의 응용 프로그램을 더 잘 이해하는 데 도움이되기를 바랍니다.