下降

时间:2013-01-26 06:57:19

标签: php arrays sorting multidimensional-array usort

当我尝试应用以下代码from here

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

我如何实现同样的目标。?

5 个答案:

答案 0 :(得分:37)

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

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

答案 1 :(得分:7)

按如下方式切换$ a和$ b;

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

答案 2 :(得分:2)

您也可以在对数组进行排序后简单地将其反转。

以与您相同的方式开始:

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

然后像这样反转结果:

$myArray = array_reverse($myArray);

答案 3 :(得分:1)

在php 7中使用太空飞船操作员:

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

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

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

答案 4 :(得分:0)

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

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

usort($results,"DESC");