동일한 값을 갖는 연관 배열을 정렬할 때 PHP에 내장된 정렬 기능이 키 순서를 유지할 수 있습니까?

Mary-Kate Olsen
풀어 주다: 2024-11-04 07:14:30
원래의
673명이 탐색했습니다.

Can PHP's built-in sorting functions preserve key order when sorting associative arrays with equal values?

PHP 정렬에서 키 순서 유지

질문:

연관 배열을 정렬할 수 있나요? PHP에서는 내장 정렬 기능을 사용하여 값이 동일할 때 원래 키 순서를 유지합니까?

배경:

uasort와 같은 PHP의 정렬 기능은 안정적인 기능을 제공하지 않습니다. 즉, 동일한 값을 가진 요소의 순서는 정렬 후에 변경될 수 있습니다.

답변:

안타깝게도 PHP는 버전 4.1.0 이후에는 안정적인 정렬을 공식적으로 지원하지 않습니다. 따라서 이를 달성하려면 사용자 정의 함수를 구현해야 합니다.

사용자 정의 함수:

한 가지 해결책은 O(n*log를 보장하는 병합 정렬 함수를 구현하는 것입니다. (n)) 복잡성을 높이고 키 순서를 유지합니다. 다음은 병합 정렬 함수(mergesort)의 예입니다.

<code class="php">function mergesort(&$array, $cmp_function = 'strcmp') {
    // Handle small arrays
    if (count($array) < 2) return;

    // Split the array into two parts
    $halfway = count($array) / 2;
    $array1 = array_slice($array, 0, $halfway);
    $array2 = array_slice($array, $halfway);

    // Recursively sort the two halves
    mergesort($array1, $cmp_function);
    mergesort($array2, $cmp_function);

    // Merge the sorted halves into the original array
    $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++];
}</code>
로그인 후 복사

이 함수를 사용하면 동일한 값을 가진 요소의 원래 키 순서를 유지하면서 연관 배열을 정렬할 수 있습니다.

추가 리소스:

  • PHP 안정 정렬 포럼 스레드

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!