使用 PHP uasort 排序时保留键顺序
查询:
是否可以使用 PHP 的内置排序函数对 PHP 中关联数组的值进行排序,同时保持键的原始顺序?
挑战:
实现稳定排序如果相等的值保留其初始键顺序,则必须使用自定义排序函数,因为 PHP 本身不支持稳定排序。
解决方案:
自定义合并排序,保证 O(n*log(n)) 复杂度并保持稳定性,可以使用:
<code class="php">function mergesort(&$array, $cmp_function = 'strcmp') { // Handle base cases if (count($array) < 2) return; // Split the array into halves $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); // Merge the sorted halves $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 remaining elements while ($ptr1 < count($array1)) $array[] = $array1[$ptr1++]; while ($ptr2 < count($array2)) $array[] = $array2[$ptr2++]; }</code>
替代资源:
信息丰富的论坛线程可以是在此链接中找到:[论坛主题链接]
以上是在 PHP 中对关联数组进行排序时可以保留键顺序吗?的详细内容。更多信息请关注PHP中文网其他相关文章!