현재 위치: > 최신 기사 목록> PHP의 strnatcmp 함수를 사용하여 사용자가 입력 한 문자열을 정규화하는 방법은 무엇입니까?

PHP의 strnatcmp 함수를 사용하여 사용자가 입력 한 문자열을 정규화하는 방법은 무엇입니까?

gitbox 2025-09-09

PHP에서 strnatcmp는 문자열을 "자연적으로 분류"하는 데 사용될 수있는 매우 실용적인 기능입니다. 자연 분류는 캐릭터의 문자 그대로의 순서만이 아니라 숫자의 실제 크기로 정렬됩니다. 이 접근법은 특히 사용자 입력을 비교해야 할 때 숫자가 포함 된 문자열을 다룰 때 특히 유용합니다. 이 기사에서는 strnatcmp 함수를 사용하여 사용자가 입력 한 문자열을 표준화하고 일부 예제를 사용하여 응용 프로그램 시나리오를 표시하는 방법을 소개합니다.

1. strnatcmp 함수는 무엇입니까?

strnatcmp 는 PHP에서 두 줄을 비교하는 함수입니다. strcmp 와 같은 일반 문자열 비교 함수와 달리 strnatcmp는 숫자의 크기를 고려하므로 문자열의 숫자 부분에 따라 문자열을 "자연스럽게 정렬"할 수 있습니다. 이것은 자연 분류에서 "10"은 문자 적 ​​비교보다는 "2"보다 큰 것으로 간주 될 것임을 의미합니다.

함수 서명은 다음과 같습니다.

 <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">$string1</span></span><span> , </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$string2</span></span><span> )
</span></span>
  • 반환 값 : 문자열의 비교 결과를 나타내는 정수를 반환합니다.

    • 반환 음수 : $ string1$ String2 보다 작습니다

    • 반환 양수 : $ String1$ string2 보다 큽니다

    • 반환 0 : 두 줄이 같음을 의미합니다

2. 왜 strnatcmp 가 필요합니까?

전통적인 문자열 비교 함수 (예 : strcmp )는 숫자를 포함하는 문자열을 비교할 때 직관적 인 결과를 생성 할 수 있습니다. 예를 들어:

 <span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">strcmp</span></span><span>(</span><span><span class="hljs-string">'10'</span></span><span>, </span><span><span class="hljs-string">'2'</span></span><span>); </span><span><span class="hljs-comment">// 양수를 출력하십시오</span></span><span>
</span></span>

이것은 10이 2 보다 크다는 것을 나타내지 만, 자연 분류의 맥락에서 숫자 10은 2 이후에야합니다. stranatcmp는 이 문제를 해결할 수 있습니다.

 <span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">strnatcmp</span></span><span>(</span><span><span class="hljs-string">'10'</span></span><span>, </span><span><span class="hljs-string">'2'</span></span><span>); </span><span><span class="hljs-comment">// 출력 음수,표현하다 '10' 보다 적습니다 '2'</span></span><span>
</span></span>

3. 표준화 된 비교에 strnatcmp를 사용하는 방법은 무엇입니까?

사용자가 여러 문자열 (예 : 파일 이름, 버전 번호 또는 숫자가 포함 된 다른 문자열)을 입력 한 형태로 작업하고 있다고 가정 하고이 문자열의 정렬 또는 비교를 정규화하려고합니다. strnatcmp를 사용하면 자연 분류에 따라 이러한 문자열을 합리적으로 정렬 할 수 있습니다.

예 1 : 사용자가 입력 한 파일 이름을 자연스럽게 정렬합니다.

 <span><span><span class="hljs-comment">// 사용자가 다음 파일 이름을 입력했다고 가정하십시오</span></span><span>
</span><span><span class="hljs-variable">$files</span></span><span> = [</span><span><span class="hljs-string">'file10.txt'</span></span><span>, </span><span><span class="hljs-string">'file2.txt'</span></span><span>, </span><span><span class="hljs-string">'file1.txt'</span></span><span>, </span><span><span class="hljs-string">'file20.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">$files</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">$files</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> . </span><span><span class="hljs-string">"\n"</span></span><span>;
}
</span></span>

출력 결과 :

 <span><span>file1.txt
file2.txt
file10.txt
file20.txt
</span></span>

이 예에서 strnatcmp는 파일 이름이 문자 순서가 아닌 숫자 크기로 정렬되도록합니다.

예 2 : 사용자가 입력 한 버전 번호 비교

또 다른 일반적인 사용 시나리오는 버전 번호를 비교하는 것입니다. 사용자가 두 가지 버전 번호를 입력하고 크기를 비교한다고 가정 해 봅시다.

 <span><span><span class="hljs-variable">$version1</span></span><span> = </span><span><span class="hljs-string">'1.10.2'</span></span><span>;
</span><span><span class="hljs-variable">$version2</span></span><span> = </span><span><span class="hljs-string">'1.9.9'</span></span><span>;

</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strnatcmp</span></span><span>(</span><span><span class="hljs-variable">$version1</span></span><span>, </span><span><span class="hljs-variable">$version2</span></span><span>);

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$result</span></span><span> &lt; </span><span><span class="hljs-number">0</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<span class="hljs-subst">$version1</span></span></span><span> is less than </span><span><span class="hljs-subst">$version2</span></span><span>\n";
} </span><span><span class="hljs-keyword">elseif</span></span><span> (</span><span><span class="hljs-variable">$result</span></span><span> &gt; </span><span><span class="hljs-number">0</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<span class="hljs-subst">$version1</span></span></span><span> is greater than </span><span><span class="hljs-subst">$version2</span></span><span>\n";
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<span class="hljs-subst">$version1</span></span></span><span> is equal to </span><span><span class="hljs-subst">$version2</span></span><span>\n";
}
</span></span>

출력 결과 :

 <span><span><span class="hljs-number">1.10</span></span><span><span class="hljs-number">.2</span></span><span> </span><span><span class="hljs-keyword">is</span></span><span> greater than </span><span><span class="hljs-number">1.9</span></span><span><span class="hljs-number">.9</span></span><span>
</span></span>

strnatcmp 를 통해 전통적인 문자열 비교 방법의 오류를 피하면서 버전 번호를 정확하게 비교할 수 있습니다.

4. strnatcmp 의 응용 시나리오

  • 사용자 입력 확인 : 사용자가 입력 한 문자열을 처리 할 때 문자열의 내용을 정렬하거나 비교할 수 있습니다. strnatcmp는 숫자 크기에 따라 문자열을 합리적으로 정렬하고 사용자 경험을 향상시키는 데 도움이됩니다.

  • 파일 이름 정렬 : strnatcmp는 파일 이름 세트를 정렬해야 할 때, 특히 파일 이름에 숫자가 포함 된 경우 매우 효과적인 도구입니다.

  • 버전 번호 관리 : 소프트웨어 버전 번호 또는 기타 유사한 데이터를 관리 해야하는 시스템의 경우, StrNATCMP는 버전 번호의 비교가 문자 순서가 아닌 숫자 크기를 기반으로하여 정확한 비교 결과를 얻을 수 있습니다.

5. 요약

strnatcmp 함수는 문자열을 자연스럽게 정렬하는 기능을 제공하며 특히 숫자를 포함하는 문자열을 처리하는 데 특히 적합합니다. 그것은 일반적인 문자열 비교 함수보다 인간의 자연 분류 규칙과 더 일치합니다. 이 기사의 소개를 통해 실제 응용 프로그램, 특히 사용자 입력, 파일 이름 및 버전 번호 비교 측면에서 strnatcmp 의 장점을 볼 수 있습니다.