PHP에서 문자열 비교는 특히 텍스트 데이터를 처리 할 때 일반적인 작업입니다. 표준 문자열 비교 함수는 일반적으로 strcmp () 또는 strcasecmp ()를 사용하지만, 이러한 함수는 자연스럽게 숫자 순서에 관계없이 문자 적 순서로만 비교됩니다. 이로 인해 기대치를 충족시키지 못하는 비교 결과가 발생할 수 있습니다. 이 문제를 해결하기 위해 PHP는 문자열 비교 "자연적으로 정렬"하는 데 사용되는 strnatcmp () 함수를 제공합니다. 이 비교는 사전 순서가 아닌 "10"이전 "10"과 같은 일상 생활에서 숫자를 분류하는 방식과 유사합니다.
이 기사는 strnatcmp () 함수의 기본 사용법을 자세히 분석하고 모든 사람이 예제를 통해 더 잘 이해할 수 있도록 도와줍니다.
strnatcmp () 함수는 두 줄을 비교하고 자연 분류 규칙에 따라 차이를 반환하는 데 사용됩니다. 기존 문자열 비교와 달리 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">$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을 반환하십시오.
$ string1 이 $ string2 보다 작 으면 음수 값이 반환됩니다.
$ String1 이 $ string2 보다 큰 경우 양수 값이 반환됩니다.
strcmp () 함수는 문자의 ASCII 값에 따라 문자열을 하나씩 비교하고 strnatcmp ()는 자연스러운 숫자 분류를 고려합니다. 예를 들어, 두 줄 "10"과 "2"를 비교하면 :
strcmp ( "10", "2")가 사용되면 결과는 "1"의 ASCII 값이 "2"의 ASCII 값보다 작기 때문에 음수 값입니다.
strnatcmp ( "10", "2")를 사용하면 숫자 10이 숫자 2보다 크기 때문에 결과는 양의 값입니다.
strnatcmp () 의 기본 아이디어는 문자열의 숫자를 단순히 문자 순서뿐만 아니라 숫자로 비교하는 것입니다. 문자열의 숫자 부분을 정수로 변환 한 다음 숫자 크기로 비교합니다. 숫자가없는 부품의 경우 여전히 사전 순서로 비교됩니다.
예를 들어:
"IMG12"및 "IMG2"를 비교할 때 strnatcmp ()는 먼저 "IMG"부분 (동일)을 비교 한 다음 숫자 부분을 비교합니다. 12는 2보다 크기 때문에 양수 값이 마침내 반환됩니다.
아래는 strnatcmp () 의 실제 적용을 보여주는 간단한 코드 예제입니다.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$str1</span></span><span> = </span><span><span class="hljs-string">"img12"</span></span><span>;
</span><span><span class="hljs-variable">$str2</span></span><span> = </span><span><span class="hljs-string">"img2"</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">$str1</span></span><span>, </span><span><span class="hljs-variable">$str2</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$result</span></span><span> < </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">$str1</span></span></span><span> is less than </span><span><span class="hljs-subst">$str2</span></span><span>\n";
} </span><span><span class="hljs-keyword">elseif</span></span><span> (</span><span><span class="hljs-variable">$result</span></span><span> > </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">$str1</span></span></span><span> is greater than </span><span><span class="hljs-subst">$str2</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">$str1</span></span></span><span> is equal to </span><span><span class="hljs-subst">$str2</span></span><span>\n";
}
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>산출:
<span><span>img12 </span><span><span class="hljs-keyword">is</span></span><span> greater than img2
</span></span>strnatcmp ()는 특히 숫자를 포함하는 문자열을 다룰 때 자연 분류가 필요한 시나리오에 매우 적합합니다. 예를 들어:
파일 이름 정렬 : 파일 이름에 숫자가 포함 된 경우 "file2"이전 "File10"과 같은 일반적인 자연 순서로 strnatcmp ()를 정렬 할 수 있습니다.
버전 번호 비교 : 버전 번호가 문자열로 저장되면 strnatcmp ()는 "1.10"및 "1.2"와 같은 버전 번호를 올바르게 비교하는 데 도움이 될 수 있습니다.
strnatcmp ()는 문자열 비교 만 지원하므로 배열 또는 다른 유형의 데이터를 비교 해야하는 경우 먼저 문자열로 변환해야합니다.
strnatcmp () 는 사례에 민감합니다. 케이스를 무시 해야하는 경우 strnatcasecmp ()를 사용할 수 있지만 strnatcmp () 와 유사하지만 문자의 경우를 무시할 수 있습니다.
strnatcmp () : 사례에 민감한 자연 정렬 비교.
strnatcasecmp () : 어퍼 케이스의 자연 정렬 비교를 무시하십시오.
예를 들어:
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$str1</span></span><span> = </span><span><span class="hljs-string">"Apple12"</span></span><span>;
</span><span><span class="hljs-variable">$str2</span></span><span> = </span><span><span class="hljs-string">"apple2"</span></span><span>;
</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-variable">$str1</span></span><span>, </span><span><span class="hljs-variable">$str2</span></span><span>); </span><span><span class="hljs-comment">// 음수를 출력하십시오,왜냐하면"A"보다 적습니다"a"</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">strnatcasecmp</span></span><span>(</span><span><span class="hljs-variable">$str1</span></span><span>, </span><span><span class="hljs-variable">$str2</span></span><span>); </span><span><span class="hljs-comment">// 산출0,왜냐하면忽略大小写后相等</span></span><span>
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>strnatcmp ()는 자연 순서 비교가 필요한 시나리오에서 매우 효율적인 매우 유용한 기능입니다. 숫자가 포함 된 문자열을 올바르게 처리하고 일반적으로 이해하는 순서대로 비교할 수 있습니다. 파일 이름 정렬, 버전 번호 비교 또는 기타 유사한 작업이든 Strnatcmp () 가 매우 유용 할 수 있습니다.
숫자 분류를 고려해야하는 문자열을 다룰 때 상황을 만나면 strnatcmp ()가 권장되는 옵션입니다.