这是下面的问题
$array[] = [
'priority' => 0,
'name' => 'a'
];
$array[] = [
'priority' => 0,
'name' => 'b'
];
$array[] = [
'priority' => 10,
'name' => 'c'
];
$array[] = [
'priority' => 0,
'name' => 'b'
];
function sortByPriority($a, $b){
if ($a['priority'] == $b['priority']) {
return 0;
}
return ($a['priority'] < $b['priority']) ? -1 : 1;
}
var_dump($array);
uasort($array, 'sortByPriority');
var_dump($array);
我预计只有第3个元素会是最后一个,但是名称为&#39; a&#39;现在排在第3位。为什么?它必须在第一名!
UPD: 我期望订购(a,b,b,c),但我在屏幕b,b,a,c
上看到答案 0 :(得分:1)
ryan-vincent给我一个解决方案链接,谢谢
更新
更好的解决方案使用http://en.wikipedia.org/wiki/Schwartzian_transform
//decorate
array_walk( $array,create_function('&$v, $k', '$v = [$v[\'priority\'], $k, $v];'));
//sort
sort($array);
//undecorate
array_walk( $array, create_function('&$v, $k', '$v = $v[2];'));