파일 이름 정렬을 처리 할 때 PHP는 매우 실용적인 기능을 제공하여 Strnatcmp ()를 제공하며, 이는 "자연적으로 분류 된"방식으로 문자열을 비교할 수 있습니다. 사전 순서별로 전통적인 정렬과 달리, 자연 분류 는 File2.txt 와 같은 문자열의 계정 번호로 가져옵니다. 이것은 숫자가 포함 된 파일 이름 (예 : 이미지 시퀀스, 로그 파일 등)을 처리 할 때 특히 유용합니다. 이 기사는 strnatcmp () 의 사용에 관한 몇 가지 실용적인 기술과 일반적인 예방 조치를 탐구합니다.
strnatcmp ()는 두 개의 문자열 매개 변수를 수락하고 비교 결과를 나타내는 정수 값을 반환합니다.
<?php
echo strnatcmp("file2.txt", "file10.txt"); // 산출 -1
?>
실제 정렬에서는 일반적으로 usort () 와 함께 사용됩니다.
<?php
$files = ["file10.txt", "file2.txt", "file1.txt"];
usort($files, "strnatcmp");
print_r($files);
?>
산출:
Array
(
[0] => file1.txt
[1] => file2.txt
[2] => file10.txt
)
strnatcmp () 는 사례에 민감하며 어떤 경우에는 정렬이 예상대로 없을 수 있습니다. 예를 들어:
<?php
$files = ["File2.txt", "file10.txt"];
usort($files, "strnatcmp");
print_r($files);
?>
사례를 무시하려면 strnatcasecmp ()를 사용할 수 있습니다.
<?php
usort($files, "strnatcasecmp");
?>
파일 경로에 디렉토리 (예 : 이미지/file2.jpg 및 images/file10.jpg )가 포함 된 경우 strnatcmp ()를 직접 사용하면 혼란스러운 디렉토리 구조 정렬이 발생할 수 있습니다. 따라서 먼저 파일 이름을 추출한 다음 다음을 정렬 할 수 있습니다.
<?php
$paths = ["images/file10.jpg", "images/file2.jpg"];
usort($paths, function($a, $b) {
return strnatcmp(basename($a), basename($b));
});
?>
자연 분류는 문자열의 일부로 확장을 처리합니다. 정렬을 위해 확장을 무시 해야하는 경우 접미사를 제거한 다음 비교할 수 있습니다.
<?php
function strip_extension($filename) {
return pathinfo($filename, PATHINFO_FILENAME);
}
$files = ["image10.png", "image2.jpg"];
usort($files, function($a, $b) {
return strnatcmp(strip_extension($a), strip_extension($b));
});
?>
실제 응용 프로그램에서 디렉토리 및 파일은 종종 함께 혼합됩니다. 정렬 할 때는 일반적으로 디렉토리가 앞에 디렉토리가되기를 원합니다. is_dir () 및 strnatcmp () 와 함께 정렬 할 수 있습니다.
<?php
$entries = ["docs", "image2.jpg", "image10.jpg"];
usort($entries, function($a, $b) {
$a_is_dir = is_dir("gitbox.net/files/" . $a);
$b_is_dir = is_dir("gitbox.net/files/" . $b);
if ($a_is_dir && !$b_is_dir) return -1;
if (!$a_is_dir && $b_is_dir) return 1;
return strnatcmp($a, $b);
});
?>
참고 : is_dir ()를 사용하여 올바르게 식별하려면 경로가 실제 여야합니다. 가상 경로 인 경우 파일 유형을 다른 방식으로 표시 할 수 있습니다.
자연 분류는 다차원 배열, 파일 타임 스탬프 등과 결합하여보다 복잡한 분류 로직을 달성 할 수 있습니다. 예를 들어 파일 이름을 자연스럽게 정렬 한 후 수정 시간의 내림차순으로 정렬합니다.
<?php
$files = ["file10.txt", "file2.txt", "file1.txt"];
usort($files, function($a, $b) {
$result = strnatcmp($a, $b);
if ($result === 0) {
return filemtime("gitbox.net/uploads/" . $b) - filemtime("gitbox.net/uploads/" . $a);
}
return $result;
});
?>
디지털 시퀀스가있는 파일 이름 (예 : 스크린 샷, 비디오 프레임, 로그 등)
사용자에 대한 직관적 인 이해가 필요한 정렬 방법
디렉토리 브라우저 및 파일 관리자와 같은 인터페이스 친화적 인 응용 프로그램
엄격한 기계 인식 분류 (예 : 해시 값 및 인코딩 규칙)
사례 민감성 또는 비표준 이름 지정 시나리오
strnatcmp () 는 PHP의 자연 분류를 다루는 강력한 도구로 파일 이름 분류의 사용자 경험을 크게 향상시킬 수 있습니다. 사용 및 예방 조치를 마스터하면 파일 처리 관련 응용 프로그램이보다 편안해질 수 있습니다. 사용 중에는 사례를 무시하거나 파일 이름을 추출하거나 실제 시나리오를 기반으로 정렬에 참여 해야하는지 판단하여 필요에 맞는 정렬 로직을 달성해야합니다.