使用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>
以上是在 PHP 中使用 uasort 對關聯數組進行排序時如何保持鍵順序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!