PHP:uasort不工作
我有以下数组 $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+ ) ) 我在wamp上试过,它成功地安排了我想要的顺序。但是,在我的Wordpress在线安装中,这不起作用。它只是不重新排列数组。应该注意的是,我在functions.php中使用一个短代码。我尝试将sortByOrder()函数移到shortcode区域之外,但没有成功 有什么问题吗?PHP:uasort不工作,php,arrays,sorting,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] => [
函数排序器($a,$b){
function sortByOrder($a, $b) {
$result = 0;
if ($b['rating'] > $a['rating']) {
$result = 1;
} elseif ($b['rating'] < $a['rating']) {
$result = -1;
}
return $result;
}
$result=0;
如果($b['rating']>$a['rating']){
$result=1;
}elseif($b[“评级”]<$a[“评级”]){
$result=-1;
}
返回$result;
}
这就是我的解决方案。它与十进制数有关,我不太清楚它为什么起作用。如果您使用整数,OP中的解决方案是可以的,但十进制数需要这样做。遇到了同样的问题。结果表明,比较回调应该返回一个整数值。如果返回浮点,则值将被转换为int。这意味着
-1
和1
之间的值都将变为0
。这就是整数起作用的原因:如果它们不一样,它们之间的差异总是至少1
介绍了PHP7.4和“”。这些使得比较器函数非常简洁。因此,“按评级
”订购将是:
uasort($infoArray,fn($a,$b)=>a['rating']$b['rating']);
尝试在比较函数中添加一个die()
语句,看看它是否首先被调用。然后在数组上执行两个print_r语句,一个在前面,一个在后面,这样我们就可以看到发生了什么。另外,检查日志中是否有任何错误。
function sortByOrder($a, $b) {
$result = 0;
if ($b['rating'] > $a['rating']) {
$result = 1;
} elseif ($b['rating'] < $a['rating']) {
$result = -1;
}
return $result;
}