按值对分组的多维数组进行排序

时间:2015-08-01 00:31:19

标签: php arrays sorting multidimensional-array

$data = array(
    'apple' => array(
        0 => array('sort'=>4, 'name'=>'apple_4'),
        1 => array('sort'=>10, 'name'=>'apple_10'),
        2 => array('sort'=>5, 'name'=>'apple_5'),
        3 => array('sort'=>1, 'name'=>'apple_1')
        ),

    'orange' => array(
        0 => array('sort'=>4, 'name'=>'orange_4'),
        1 => array('sort'=>10, 'name'=>'orange_10')
        )
    );

需要协助排序多维数组。对于上面的数组,我想通过'sort'值按降序对每个组的内容进行排序。该组的密钥应保持完整(苹果,橙色),但内容的密钥并不重要。

应订购数据:

  • 苹果
    • apple_10
    • apple_5
    • apple_4
    • apple_1
    • orange_10
    • orange_4

2 个答案:

答案 0 :(得分:1)

使用usort()对数组进行排序:

foreach($data as &$value) {
    usort($value,function($a,$b) {
        return $b['sort'] - $a['sort'];
    });
}

答案 1 :(得分:0)

$data = array(                                                                  
    'apple' => array(                                                           
        0 => array('sort'=>4, 'name'=>'apple_4'),                               
        1 => array('sort'=>10, 'name'=>'apple_10'),                             
        2 => array('sort'=>5, 'name'=>'apple_5'),                               
        3 => array('sort'=>1, 'name'=>'apple_1')                                
    ),                                                                          

    'orange' => array(                                                          
        0 => array('sort'=>4, 'name'=>'orange_4'),                              
        1 => array('sort'=>10, 'name'=>'orange_10')                             
    )                                                                           
);                                                                              

foreach($data as &$value) {                                                        
    usort($value, function($a, $b) {                                            
        return $a['sort'] < $b['sort'];                                         
    });                                                                                                                                       
}