uasort排序所有数组,但我需要一个属性

时间:2014-10-21 12:35:05

标签: php sorting

这是下面的问题

$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

上看到

1 个答案:

答案 0 :(得分:1)

ryan-vincent给我一个解决方案链接,谢谢

SOLUTION

更新

更好的解决方案使用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];'));