在 PHP 排序中保留键顺序
问题:
我们可以对关联数组进行排序吗在 PHP 中,当值相等时,使用内置排序保留原始键顺序函数?
背景:
PHP 的排序函数(如 uasort)不提供稳定排序,这意味着排序后具有相同值的元素的顺序可能会发生变化。
答案:
不幸的是, 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中文网其他相关文章!