首页 > 后端开发 > php教程 > PHP 的内置排序函数在对具有相等值的关联数组进行排序时可以保留键顺序吗?

PHP 的内置排序函数在对具有相等值的关联数组进行排序时可以保留键顺序吗?

Mary-Kate Olsen
发布: 2024-11-04 07:14:30
原创
722 人浏览过

Can PHP's built-in sorting functions preserve key order when sorting associative arrays with equal values?

在 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 的内置排序函数在对具有相等值的关联数组进行排序时可以保留键顺序吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板