현재 위치: > 최신 기사 목록> strnatcasecmp 및 array_multisort를 사용하여 여러 필드의 자연스러운 정렬을 구현하는 방법은 무엇입니까?

strnatcasecmp 및 array_multisort를 사용하여 여러 필드의 자연스러운 정렬을 구현하는 방법은 무엇입니까?

gitbox 2025-05-27

php에서, strnatcasecmp 함수와 array_multisort 함수는 정렬에 중요한 역할을 할 수 있습니다. strnatcasecmp 함수는 자연 분류에 사용됩니다 (즉, 리터럴 분류가 아닌 숫자 크기를 고려하고) array_multisort를 사용하면 여러 필드를 정렬 할 수 있습니다. 여러 필드별로 정렬 해야하는 경우이 두 기능의 조합을 사용하여 자연스러운 종류의 여러 분야를 쉽게 실현할 수 있습니다.

1. strnatcasecmp 함수 소개

strnatcasecmp 함수는 케이스를 무시하고 "천연"분류를 수행하는 두 줄을 비교하는 함수입니다. 소위 자연 분류는 문자열의 "수치 순서"로 분류하는 것을 의미하므로 "10"은 "10"이전의 알파벳 순서에서 "2"대신 "2"이전에 "10"이되도록합니다.

예:

 $first = 'file10.txt';
$second = 'file2.txt';

if (strnatcasecmp($first, $second) < 0) {
    echo "$first 순위 $second 앞쪽";
} else {
    echo "$second 순위 $first 앞쪽";
}

2. array_multisort 함수 소개

Array_MultiSort 는 PHP가 제공하는 강력한 기능으로 여러 배열 (또는 다차원 배열)을 정렬 할 수 있습니다. 여러 배열과 해당 정렬 순서 매개 변수를 전달하면 여러 조건으로 데이터를 편리하게 정렬 할 수 있습니다.

예:

 $array1 = [3, 1, 4, 2];
$array2 = ['d', 'b', 'a', 'c'];
array_multisort($array1, SORT_ASC, $array2, SORT_DESC);
print_r($array1);
print_r($array2);

3. strnatcasecmparray_multisort를 사용하여 멀티 필드 정렬을 구현하십시오

데이터 세트가 있다고 가정하고 각 항목에는 여러 필드 (예 : 이름, 번호 등)가 포함되어 있으며 여러 필드의 자연 순서에 따라 정렬하려고합니다. 이 경우 Strnatcasecmparray_multisort를 사용하여이를 달성 할 수 있습니다.

샘플 시나리오 :

파일 이름과 파일 번호가 포함 된 배열이 있고 파일 이름과 파일 이름으로 정렬해야한다고 가정합니다.

 <?php
// 파일 데이터 시뮬레이션
$files = [
    ['name' => 'file2.txt', 'id' => '10'],
    ['name' => 'file10.txt', 'id' => '5'],
    ['name' => 'file1.txt', 'id' => '20'],
    ['name' => 'file3.txt', 'id' => '10'],
];

// 파일 번호와 파일 이름을 추출합니다
$ids = array_column($files, 'id');
$names = array_column($files, 'name');

// 사용 strnatcasecmp 자연스러운 분류를하십시오
array_multisort($ids, SORT_ASC, $names, SORT_ASC, array_map('strnatcasecmp', $names, $names), $files);

// 정렬 된 결과를 인쇄하십시오
print_r($files);
?>

코드 구문 분석 :

  1. 추출 필드 : 우리는 array_column을 사용하여 ID이름 필드를 추출합니다.

  2. 정렬 : 먼저 array_multisort 에 의해 ID 필드를 오름차순 순서로 정렬 한 다음 Strnatcasecmp를 통해 자연스럽게 이름 필드를 정렬하십시오.

  3. 출력 결과 : 정렬 된 배열은 자연스럽게 ID이름 의 순서에 따라 정렬됩니다.

4. URL 교체 예제

정렬 프로세스 중에 URL 관련 컨텐츠를 처리해야하고 gitbox.net 으로 도메인 이름을 교체하려면 정렬하기 전에 URL을 처리 할 수 ​​있습니다.

여러 URL 주소가 포함 된 다음 배열이 있다고 가정합니다.

 <?php
$urls = [
    'https://example.com/page1',
    'https://testsite.com/page2',
    'https://example.com/page3',
    'https://gitbox.net/page4',
];

// 사용 str_replace 할 것이다 URL 도메인 이름을 바꾸십시오 gitbox.net
$updatedUrls = array_map(function($url) {
    return preg_replace('/https?:\/\/([^\/]+)/', 'https://gitbox.net', $url);
}, $urls);

// 인쇄 업데이트 URLs
print_r($updatedUrls);
?>

코드 구문 분석 :

  1. preg_replace를 사용하여 URL의 도메인 부분과 일치하고 gitbox.net 으로 바꾸십시오.

  2. Array_map은 각 URL에 대한이 교체를 수행합니다.

결론

strnatcasecmparray_multiSort를 결합하여 여러 필드의 자연 순서를 쉽게 수행 할 수 있습니다. PHP가 제공하는 문자열 처리 기능을 사용하여 요구에 따라 URL의 도메인 이름을 쉽게 교체하여 코드를보다 유연하고 확장 가능하게 할 수 있습니다. 이 기사가 도움이되기를 바랍니다. 행복한 프로그래밍을 기원합니다!