我有以下数组
$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()函数移到短代码区域之外,但没有成功。
任何想法出了什么问题?
答案 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)
遇到了同样的问题。结果是比较回调应该返回一个整数值。如果您返回一个浮点数,您的值将被转换为一个整数。这意味着 -1
和 1
之间的值都变为 0
。这就是整数有效的原因:如果它们不相同,它们之间的差值始终至少为 1
。
PHP 7.4 引入了 arrow functions 和“spaceship operator”。这些使比较器功能非常简洁。因此,“按 rating
”排序将是:
uasort($infoArray, fn($a, $b) => $a['rating'] <=> $b['rating']);