通过比较一列浮点值对二维数组中的行进行降序排序[重复]

问题描述 投票:0回答:5

当我尝试应用以下代码时从这里

usort($myArray, function($a, $b) {
    return $a['order'] - $b['order'];
});

它按升序给出结果。

输出

0
0
0
0
0
0.29
1.09
6.33

交换 $a 和 $b 时,除一个值外,它按降序给出结果

usort($myArray, function($a, $b) {
    return $b['order'] - $a['order'];
});

输出

6.33
1.09
0
0
0
0
0.29
0

我想按以下顺序获得结果:

6.33
1.09
0.29
0
0
0
0
0

我如何实现同样的目标?

php arrays sorting multidimensional-array usort
5个回答
42
投票

我的第一个猜测是 usort 需要一个整数响应,如果返回值不是整数,则会四舍五入。在 0.29 的情况下,与 0 比较时,结果为 0.29(或 -0.29),四舍五入为 0。对于 usort,0 表示两个值相等。

尝试这样的事情:

usort($myArray, function($a, $b) {
    if($a['order']==$b['order']) return 0;
    return $a['order'] < $b['order']?1:-1;
});

(我认为这是正确的方向。要颠倒顺序,请将

<
更改为
>


21
投票

在 php 7(及以上)中使用太空船操作符:

usort($myArray, function($a, $b) {
    return $a['order'] <=> $b['order'];
});

将返回按升序排序的数组。反转比较将以降序返回。

usort($myArray, function($a, $b) {
    return $b['order'] <=> $a['order'];
});

13
投票

只需将 $a 和 $b 互换即可,如下所示;

function sort($a, $b){ 
return strcasecmp($b->order, $a->order);
}
usort($myArray, "sort");

5
投票

我知道这已经很旧了,但希望这对某人有帮助。设置降序的最简单方法是乘以负一 (-1),如下所示。对我来说效果很好,有文字。

function DESC($a, $b)
{
    return strcmp($a["text"], $b["text"])*-1;
}

usort($results,"DESC");

4
投票

您还可以在排序后简单地反转数组。

以与您相同的方式开始:

usort($myArray, function($a, $b) {
    return $a['order'] - $b['order'];
});

然后像这样反转结果:

$myArray = array_reverse($myArray);
© www.soinside.com 2019 - 2024. All rights reserved.