按子数组中的值对数组进行排序

时间:2014-07-25 14:41:16

标签: php arrays sorting

我一直在按照子阵列中的值(来自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

那么我做错了什么?

2 个答案:

答案 0 :(得分:3)

替换 return $a[2] - $b[2];

使用

if($a[2] == $b[2])
{
    return 0;
}
else
{
    return ($a[2] > $b[2]) ? +1 : -1;
}

DEMO

答案 1 :(得分:0)

usort期望函数返回一个整数。在排序浮点数时,值会四舍五入,从而导致错误

为了得到你想要的结果,你可以使用phps ceil函数来舍入值:

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