PHP:uasort不工作

时间:2017-12-22 17:38:37

标签: php arrays sorting

我有以下数组

$infoArray = Array
(
    [Shockwafe Ultra 9.2] => Array
        (
            [0] => 8
            [1] => 45 Hz - 18.000 Hz
            [2] => 9.2
            [3] => 1
            [4] => 1
            [5] => 1
            [6] => 
            [7] => 
            [8] => B+
            [9] => B+
            [10] => A
            [11] => B
        )

    [Bose 5.1 SoundTouch 300] => Array
        (
            [0] => 9
            [1] => 45 Hz - 20.000 Hz
            [2] => 5.1
            [3] => 1
            [4] => 1
            [5] => 1
            [6] => 1
            [7] => 1
            [8] => A
            [9] => A
            [10] => A+
            [11] => A+
        )

    [Sonos 5.1 System] => Array
        (
            [0] => 10
            [1] => 31.5 Hz - 20.000 Hz
            [2] => 5.1
            [3] => 1
            [4] => 1
            [5] => 1
            [6] => 1
            [7] => 1
            [8] => A+
            [9] => A+
            [10] => A+
            [11] => A+
        )

)

我正在尝试使用PHP对其进行排序。我想按每个数组成员中的[0]值排序。顺序应该是,Sonos首先,Bose第二,Shockwafe第三。

我的PHP代码如下所示:

function sortByOrder($a, $b) {
return $a[0] - $b[0]; }

uasort($infoArray, 'sortByOrder');

我在wamp上试过这个,它成功地安排了我想要的订单。但是,在我的Wordpress安装中,这不起作用。它根本不重新排列数组。应该注意的是,我在一个短代码中的functions.php里面工作。我尝试将sortByOrder()函数移到短代码区域之外,但没有成功。

任何想法出了什么问题?

2 个答案:

答案 0 :(得分:0)

function sortByOrder($a, $b) {
        $result = 0;
        if ($b['rating'] > $a['rating']) {
            $result = 1;
        } elseif ($b['rating'] < $a['rating']) {
            $result = -1;
        }
        return $result; 
   }

这最终成为我的解决方案。它与十进制数有关,我不确定它为什么有效。如果使用整数,OP中的解是好的,但这对于十进制数是必需的。

答案 1 :(得分:0)

遇到了同样的问题。结果是比较回调应该返回一个整数值。如果您返回一个浮点数,您的值将被转换为一个整数。这意味着 -11 之间的值都变为 0。这就是整数有效的原因:如果它们不相同,它们之间的差值始终至少为 1

PHP 7.4 引入了 arrow functions 和“spaceship operator”。这些使比较器功能非常简洁。因此,“按 rating”排序将是:

uasort($infoArray, fn($a, $b) => $a['rating'] <=> $b['rating']);