使用 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中文网其他相关文章!