微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在PHP中使用arsort()进行稳定排序?

我需要根据值对PHP中的数组进行排序,数组使用一些数字作为键和值,例如:
$a = array(70 => 1,82 => 5,61 => 3,55 => 1,34 => 2,53 => 2,21 => 4,13 => 5);

我喜欢这样排序:

Array
(
    [82] => 5
    [13] => 5
    [21] => 4
    [61] => 3
    [34] => 2
    [53] => 2
    [70] => 1
    [55] => 1
)

我使用arsort它工作,但有一个问题,因为这个函数使更改defult排序键和排序数组:

Array
(
    [13] => 5
    [82] => 5
    [21] => 4
    [61] => 3
    [53] => 2
    [34] => 2
    [55] => 1
    [70] => 1
)
构造一个新数组,其元素是原始数组的键,值和位置:
$temp = array();
$i = 0;
foreach ($array as $key => $value) {
  $temp[] = array($i,$key,$value);
  $i++;
}

然后使用用户定义的顺序排序,将原始位置考虑在内:

uasort($temp,function($a,$b) {
 return $a[2] == $b[2] ? ($a[0] - $b[0]) : ($a[2] < $b[2] ? 1 : -1);
});

最后,将其转换回原始的关联数组:

$array = array();
foreach ($temp as $val) {
  $array[$val[1]] = $val[2];
}

原文地址:https://www.jb51.cc/php/133162.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐