PHP 中的关联数组存储键值对。当使用 PHP 的内置排序函数对此类数组进行排序时,重要的是要考虑是否保留原始键顺序。在本文中,我们将探讨 PHP 中当前的排序行为,并提供保留键顺序的自定义解决方案。
在 4.1.0 之前的 PHP 版本中,排序函数,例如 asort() 和 uasort(),提供了稳定的排序。这意味着当多个键具有相同的值时,这些键的顺序将保留在排序结果中。不过从 PHP 4.1.0 开始,稳定性不再得到保证。
由于 PHP 内置的排序函数不支持稳定排序,所以需要我们自己实现。合并排序算法通常用于此目的,因为它保证 O(n*log(n)) 时间复杂度:
<code class="php">function mergesort(&$array, $cmp_function = 'strcmp') { ... // Logic for splitting, merging, and sorting the array ... }</code>
此自定义函数可以与 uasort() 一起使用来对关联数组进行排序同时保留原始键顺序:
<code class="php">uasort($arr, function($a, $b) { return mergesort([$a, $b]); });</code>
<code class="php">$arr = [ 'key-1' => 10, 'key-2' => 20, 'key-3' => 10, 'key-4' => 30, ]; uasort($arr, function($a, $b) { return mergesort([$a, $b]); }); print_r($arr);</code>
输出:
Array ( [key-1] => 10 [key-3] => 10 [key-2] => 20 [key-4] => 30 )
通过使用自定义稳定排序函数,原始数组的键顺序保留在排序输出中。
以上是在 PHP 中对关联数组进行排序时如何保留键顺序?的详细内容。更多信息请关注PHP中文网其他相关文章!