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

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

Susan Sarandon
Susan Sarandon原创
2024-11-02 20:12:31116浏览

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn