>백엔드 개발 >PHP 튜토리얼 >uasort를 사용하여 PHP에서 연관 배열을 정렬하는 동안 키 순서를 어떻게 유지할 수 있습니까?

uasort를 사용하여 PHP에서 연관 배열을 정렬하는 동안 키 순서를 어떻게 유지할 수 있습니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-03 18:44:02201검색

How Can I Maintain Key Order While Sorting Associative Arrays in PHP Using uasort?

uasort를 사용하여 PHP 정렬에서 키 순서 유지

uasort 함수를 사용하여 PHP에서 연관 배열을 정렬할 때 여러 키가 동일한 값을 공유하더라도 원래 키 순서를 유지하는 안정적인 정렬.

솔루션

PHP는 더 이상 기본적으로 안정적인 정렬을 지원하지 않으므로 사용자 정의 함수 필수:

<code class="php">function mergesort(&$array, $cmp_function = 'strcmp') {
    // Base cases for arrays of size < 2
    if (count($array) < 2) return;
    // Split the array in half
    $halfway = count($array) / 2;
    $array1 = array_slice($array, 0, $halfway);
    $array2 = array_slice($array, $halfway);
    // Recursively sort the halves
    mergesort($array1, $cmp_function);
    mergesort($array2, $cmp_function);
    // Handle case if $array1 is entirely less than $array2
    if (call_user_func($cmp_function, end($array1), $array2[0]) < 1) {
        $array = array_merge($array1, $array2);
        return;
    }
    // Merge the two sorted arrays
    $array = array();
    $ptr1 = $ptr2 = 0;
    while ($ptr1 < count($array1) && $ptr2 < count($array2)) {
        if (call_user_func($cmp_function, $array1[$ptr1], $array2[$ptr2]) < 1) {
            $array[] = $array1[$ptr1++];
        } else {
            $array[] = $array2[$ptr2++];
        }
    }
    // Merge the remainder
    while ($ptr1 < count($array1)) $array[] = $array1[$ptr1++];
    while ($ptr2 < count($array2)) $array[] = $array2[$ptr2++];
    return;
}</code>

사용법

간단히 mergesort 함수를 사용하여 연관 배열을 정렬하고 이를 첫 번째 인수로 전달하고 값 비교를 위한 익명 함수( 선택사항):

<code class="php">uasort($arr, function($a, $b){
    return ($a == $b)?1:($a - $b);
});</code>

위 내용은 uasort를 사용하여 PHP에서 연관 배열을 정렬하는 동안 키 순서를 어떻게 유지할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.