>  기사  >  백엔드 개발  >  PHP에서 연관 배열을 정렬하는 동안 키 순서를 유지할 수 있습니까?

PHP에서 연관 배열을 정렬하는 동안 키 순서를 유지할 수 있습니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-02 20:12:31116검색

Can you Preserve Key Order While Sorting Associative Arrays in PHP?

PHP의 uasort를 사용하여 정렬하는 동안 키 순서 유지

쿼리:

가능한가요? PHP에 내장된 정렬 기능을 사용하여 키의 원래 순서를 유지하면서 PHP에서 연관 배열의 값을 정렬하시겠습니까?

과제:

안정적인 정렬을 달성하려면 동일한 값이 초기 키 순서를 유지하는 경우 PHP는 기본적으로 안정적인 정렬을 지원하지 않으므로 사용자 정의 정렬 기능을 사용해야 합니다.

해결책:

사용자 정의 병합 정렬, O(n*log(n)) 복잡성을 보장하고 안정성을 유지하는 다음을 사용할 수 있습니다:

<code class="php">function mergesort(&$array, $cmp_function = 'strcmp') {
    // Handle base cases
    if (count($array) < 2) return;
    
    // Split the array into halves
    $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);
    
    // Merge the sorted halves
    $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 remaining elements
    while ($ptr1 < count($array1)) $array[] = $array1[$ptr1++];
    while ($ptr2 < count($array2)) $array[] = $array2[$ptr2++];
}</code>

대체 리소스:

정보 포럼 스레드는 다음과 같습니다. 다음 링크에서 찾을 수 있습니다: [포럼 스레드 링크]

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

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