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 중국어 웹사이트의 기타 관련 기사를 참조하세요!