gpt4 book ai didi

php - 按值降序排列关联数组并在值相同时保留顺序

转载 作者:可可西里 更新时间:2023-11-01 00:57:09 24 4
gpt4 key购买 nike

我想对关联数组进行排序,并且有一个内置函数可以实现相同的可视化。 arsort(),但是这个函数的问题是当值相同时它不会保持原来的键顺序。例如

$l = [
'a' => 1,
'b' => 2,
'c' => 2,
'd' => 4,
'e' => 5,
'f' => 5
];

我想要的结果是:

$l = [
'e' => 5,
'f' => 5,
'd' => 4,
'b' => 2,
'c' => 2,
'a' => 1
];

arsort() 以降序给出结果,但当值相同时它会随机排列元素。此问题不是 PHP array multiple sort - by value then by key? 的重复问题.在那个问题中,它要求按字母顺序对相同的数值进行排序,但在我的问题中,我要求值按原始顺序排序(如果它们相同)。

最佳答案

可能有更有效的方法来执行此操作,但我认为这应该可以在具有相同值的组中保持原始键顺序。例如,我将从这个数组开始:

$l = [ 'a' => 1, 'b' => 2, 'c' => 2, 'd' => 4, 'g' => 5, 'e' => 5, 'f' => 5 ]; 
  1. 按值对数组进行分组:

    foreach ($l as $k => $v) {
    $groups[$v][] = $k;
    }

    因为 foreach 循环按顺序读取数组,键将以正确的顺序插入到各自的组中,这将产生:

    [1 => ['a'], 2 => ['b', 'c'], 4 => ['d'], 5 => ['g', 'e', 'f'] ];
  2. 按键降序排列组:

    krsort($groups);
  3. 使用嵌套循环从分组数组中重新组合排序数组:

    foreach ($groups as $value => $group) {
    foreach ($group as $key) {
    $sorted[$key] = $value;
    }
    }

关于php - 按值降序排列关联数组并在值相同时保留顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38446580/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com