PHP에서, strnatcasecmp 함수는 자연 순서 비교를 수행하는 데 사용되는 함수입니다. 문자열의 숫자를 고려하여 문자열을 비교하여 사전 순서가 아닌 숫자의 크기로 정렬합니다. 파일 이름을 정렬, 목록 항목 등과 같은 숫자로 텍스트를 처리하는 데 특히 유용합니다.
이 기사에서는 PHP의 strnatcasecmp 함수를 사용하여 여러 줄의 텍스트 라인을 자연스럽게 정렬하는 방법을 설명합니다.
strnatcasecmp 함수는 문자열의 숫자에 따라 케이스와 자연 순서를 무시하는 두 줄을 자연 순서로 비교하는 데 사용됩니다. 이것은 숫자가있는 텍스트를 처리 할 때 일반 strcmp 함수보다 더 정확하게 만듭니다.
int strnatcasecmp ( string $str1 , string $str2 )
str1 과 str2 는 비교할 두 줄입니다.
반환 값은 정수입니다. str1이 str2 보다 작 으면 음의 값을 반환합니다. str1 이 str2 보다 크면 양수 값을 반환합니다. 그것들이 같으면 0을 반환합니다.
자연 분류에 따라 정렬 해야하는 다음 줄의 텍스트 라인이 있다고 가정합니다. 샘플 텍스트에는 숫자가있는 일부 줄이 포함되어 있습니다.
line10
line2
line1
line20
line11
line3
우리는 알파벳 순서가 아닌 숫자 크기로 이러한 텍스트 라인을 원합니다.
먼저이 텍스트를 배열에 저장 한 다음 strnatcasecmp 를 사용하여 USORT 기능을 사용하여 정렬 할 수 있습니다. 완전한 샘플 코드는 다음과 같습니다.
<?php
// 멀티 라인 텍스트 배열
$text = [
'line10',
'line2',
'line1',
'line20',
'line11',
'line3'
];
// 사용 strnatcasecmp 정렬 배열
usort($text, 'strnatcasecmp');
// 출력 정렬 배열
foreach ($text as $line) {
echo $line . PHP_EOL;
}
?>
설명하다:
USORT 함수를 사용하여 배열 $ 텍스트를 정렬합니다. USORT 함수는 두 개의 매개 변수를 허용하고 첫 번째는 배열이고 두 번째는 정렬을위한 비교 함수입니다. 여기서 우리는 strnatcasecmp 함수를 비교기로 사용합니다.
strnatcasecmp는 문자열의 숫자에 따라 자연스럽게 정렬됩니다.
정렬 된 출력은 다음과 같습니다.
line1
line2
line3
line10
line11
line20
URL이 포함 된 텍스트를 처리 할 때 도메인 이름과 경로가 포함 된 텍스트를 정렬해야 할 수도 있습니다. 텍스트에 여러 URL이 포함되어 있다고 가정하면 Strnatcasecmp를 사용하여 어떻게 정렬 할 수 있습니까?
<?php
// 포함하다 URL 텍스트 배열
$urls = [
'https://example.com/page10',
'https://gitbox.net/page2',
'https://gitbox.net/page1',
'https://example.com/page20',
'https://gitbox.net/page11',
'https://example.com/page3'
];
// 사용 strnatcasecmp 오른쪽 URL 정렬을위한 배열
usort($urls, 'strnatcasecmp');
// 출력 정렬 URL
foreach ($urls as $url) {
echo $url . PHP_EOL;
}
?>
참고 : 위의 예에서는 모든 URL의 도메인 이름을 gitbox.net 으로 대체했습니다. 이 코드는 URL의 경로 부분을 기반으로 자연스럽게 정렬됩니다 (즉, /페이지 이후의 숫자 부분).
strnatcasecmp 함수는 특히 숫자를 포함하는 문자열을 정렬해야 할 때 매우 유용한 도구입니다. strnatcasecmp 와 함께 USORT를 사용하면 여러 줄의 텍스트 나 URL을 자연스럽게 정렬 할 수 있습니다.
이러한 분류 방법은 숫자 부품을 합리적으로 정렬 할뿐만 아니라 기존 문자열 비교 방법이 가져올 수있는 분류 문제를 피합니다. strnatcasecmp는 숫자가 포함 된 텍스트를 다룰 때 매우 실용적인 기능입니다.