繁体   English   中英

按值排序的多维关联数组

[英]Multidimentional associative array sorting by value

我有需要按值排序的关联数组:

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");         
}

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

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

与:

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

要在foreach循环中修改数组,您必须像这样通过引用传递键/值

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

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

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

使用数组遍历的演示

我有需要按值排序的关联数组:

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");         
}

但是没有成功。 我该怎么做?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM