我一直在按照子阵列中的值(来自Sort Multi-dimensional Array by Value [duplicate])对数组进行排序的说明,但它对我不起作用。请参阅下面的代码:
$items[] = array("apple", "green", 5.13);
$items[] = array("banana", "green", 5.03);
$items[] = array("banana", "yellow", 6.13);
$items[] = array("apple", "red", 7.13);
function sortByOrder($a, $b) {
return $a[2] - $b[2];
}
usort($items, 'sortByOrder');
foreach ($items as $item) {
echo "$item[2] : $item[0] - $item[1]\n";
}
此代码返回:
5.13 : apple - green
5.03 : banana - green
6.13 : banana - yellow
7.13 : apple - red
预期结果如下:
5.03 : banana - green
5.13 : apple - green
6.13 : banana - yellow
7.13 : apple - red
那么我做错了什么?
答案 0 :(得分:3)
替换
return $a[2] - $b[2];
使用
if($a[2] == $b[2])
{
return 0;
}
else
{
return ($a[2] > $b[2]) ? +1 : -1;
}
答案 1 :(得分:0)
usort期望函数返回一个整数。在排序浮点数时,值会四舍五入,从而导致错误
为了得到你想要的结果,你可以使用phps ceil函数来舍入值:
function sortByOrder($a, $b) {
return ceil($a[2] - $b[2]);
}