繁体   English   中英

使用usort()的PHP排序数组不起作用

[英]PHP Sorting Array Using usort() Not Working

我有这个数组:

Array
(
    [0] => Array
        (
            [timestamp] => lm81-1527799632244
            [robo] => C4
            [price] => 53.83600000
        )

    [1] => Array
        (
            [timestamp] => lm81-1527799632244
            [robo] => RE
            [price] => 53.83600000
        )

    [2] => Array
        (
            [timestamp] => lm81-1527799632244
            [robo] => C4
            [price] => 0.09188900
        )

    [3] => Array
        (
            [timestamp] => lm81-1527799632244
            [robo] => RE
            [price] => 0.09188900
        )

    [4] => Array
        (
            [timestamp] => lm81-1527799632244
            [robo] => C4
            [price] => 584.80000000
        )

)

我期望这样的结果(按robo DESC排序):

Array
(
    [0] => Array
        (
            [timestamp] => lm81-1527799632244
            [robo] => RE
            [price] => 53.83600000
        )

    [1] => Array
        (
            [timestamp] => lm81-1527799632244
            [robo] => RE
            [price] => 0.09188900
        )

    [2] => Array
        (
            [timestamp] => lm81-1527799632244
            [robo] => C4
            [price] => 53.83600000
        )

    [3] => Array
        (
            [timestamp] => lm81-1527799632244
            [robo] => C4
            [price] => 0.09188900
        )

    [4] => Array
        (
            [timestamp] => lm81-1527799632244
            [robo] => C4
            [price] => 584.80000000
        )

)

我已经做到了:

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

但是我的数组仍然没有按DESC顺序排列。 知道我做错了什么吗?

如果要对string值进行排序,则应使用strcmp

usort($dc_array_process, function($a, $b) {
    return strcmp($a['robo'], $b['robo']);
});

要么

usort($dc_array_process, function($a, $b) {
    return -strcmp($a['robo'], $b['robo']);  //negative to reverse
});

文献:

int strcmp(字符串$ str1,字符串$ str2)

如果str1小于str2,则返回<0;否则,返回0。 如果str1大于str2,则> 0;如果相等,则> 0。

因为算术-导致将值转换为int

usort($dc_array_process, function($a, $b) {
    return strcmp($a['robo'], $b['robo']);
});

根据手册 ,传递给usort的比较函数必须…

返回小于,等于或大于零的整数

…以便正确确定订单。 由于您尝试排序的值是字符串,因此您正在使用的减号操作将无效。

尝试在返回中使用strcmp…

return strcmp( $a['robo'], $b['robo'] );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM