在PHP 排序中保留鍵順序
問題:
問題:我們可以對關聯數字組進行排序嗎在PHP 中,當值相等時,使用內建排序函數保留原始鍵順序?
背景:PHP 的排序函數(如 uasort)不提供穩定的排序函數排序,意味著排序後值相等的元素順序可能會改變。
答案:遺憾的是,PHP 在 4.1.0 版本之後正式不再支援穩定排序。因此,需要實作一個自訂函數來實現這一點。
自訂函數:<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>一種解決方案是實現歸併排序函數,它保證O(n*log (n)) 複雜性並保持密鑰順序。以下是合併排序函數 (mergesort) 的範例:
透過使用此函數,您可以對關聯數組進行排序,同時保持具有相等值的元素的原始鍵順序。
以上是PHP 的內建排序函數在對具有相等值的關聯數組進行排序時可以保留鍵順序嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!