usort 降序

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

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

我如何实现相同的目标?


答案 1

我的第一个猜测是,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;
});

(我认为这是正确的方向。要反转顺序,请将<>)


答案 2

只需切换$a并按如下方式$b即可;

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