22

当我尝试从此处应用以下代码时

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

我如何达到同样的效果。?

4

5 回答 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;
});

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

于 2013-01-26T07:05:17.510 回答
12

只需如下切换 $a 和 $b 即可;

function sort($a, $b){ 
return strcasecmp($b->order, $a->order);
}
usort($myArray, "sort");
于 2014-10-14T20:51:10.927 回答
9

在 php 7(及更高版本)中使用 space ship 运算符:

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

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

usort($myArray, function($a, $b) {
    return $b['order'] <=> $a['order'];
});
于 2019-12-03T11:57:01.567 回答
4

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

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

usort($results,"DESC");
于 2018-09-21T20:55:17.500 回答
3

排序后,您也可以简单地反转数组。

以与您相同的方式开始:

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

然后像这样反转结果:

$myArray = array_reverse($myArray);
于 2016-07-15T13:14:10.933 回答