首页 > 后端开发 > php教程 > 在 PHP 中对关联数组进行排序时可以保留键顺序吗?

在 PHP 中对关联数组进行排序时可以保留键顺序吗?

Susan Sarandon
发布: 2024-11-02 20:12:31
原创
198 人浏览过

Can you Preserve Key Order While Sorting Associative Arrays in PHP?

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

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