按值排序的多维关联数组

时间:2015-01-25 22:35:32

标签: php arrays sorting

我有一个关联数组,我需要按值进行索引:

Array
(
    ['group_1'] => Array
        (
            ['key_1'] => Array
                 (
                      ['field_1'] = 'someval',
                      ['order'] = 2
                 )
            ['key_2'] => Array
                 (
                      ['field_1'] = 'someval',
                      ['order'] = 0
                 )
        )

    ['group_2'] => Array
        (
            ...
        )
)

我正在尝试使用usort()按'order'字段对每个'group_N'数组进行排序:

function cmp($a, $b) {
    if ($a['order'] == $b['order']) {
        return 0;
    }
    return ($a['order'] < $b['order']) ? -1 : 1;
}

foreach ($result_array as $group => $values) {      
        uasort($values, "cmp");         
}

但没有成功。 我该怎么办?

3 个答案:

答案 0 :(得分:0)

按建议通过引用传递参数解决了问题。

出色地工作:

foreach ($result_array as $group => &$values) {      
    uasort($values, "cmp");         
}

答案 1 :(得分:0)

修改foreach循环中的数组,必须通过引用传递key / val,如此

foreach ($result_array as &$group => &$values) {      
        uasort($values, "cmp");         
}

或使用array walk()(根据@zerkms这个比较慢,所以可能是个坏主意)

array_walk($array,
   function(&$row){
       uasort($row, "cmp");
   }
);

demo using array walk

答案 2 :(得分:-1)

尝试使用以下逻辑。对我来说它有效。

usort($arr, function($a, $b) {
return $a['order'] - $b['order']});