php multilevel数组按su-sub-sub数组值排序

时间:2015-03-19 08:38:14

标签: php sorting cakephp

我有一个多级数组,如下所示

array( 
    (int)0=>array(
              'User' => array(
        'PostType' => array(
            'PHP' => array(
                'id' => '2',
                'type_title' => 'Core Questions',
                'type_description' => 'none',
                'type_sort_order' => '7'
                'Post'=>array(
                    ......
                    ),
            ),
            'ASP' => array(
                'id' => '1',
                'type_title' => 'Core Questions',
                'type_description' => 'none',
                'type_sort_order' => '1'
                'Post'=>array(
                    ......
                    ),
            ),
        ),
)));

我已经提取了一个用户,其帖子按postType分类 postType有type_sort_order字段
我想按PostType字段
对子数组type_sort_order进行排序 以便ASPPHP之前 我尝试过以下

usort($arr,function(){
                return  ($a[0]['User']['PostType']['post_sort_order'] < $b[0]['User']['PostType']['post_sort_order'])?1:-1;
            });

还有许多其他类型,但没有得到正确的结果

2 个答案:

答案 0 :(得分:1)

array_multisort会奏效。解决方法如下:

$list = //Your array

$sortOrders = array();
foreach ($list[0]['User']['PostType'] as $postType) {
    $sortOrders[] = $postType['type_sort_order'];
}

array_multisort($sortOrders, $list[0]['User']['PostType']);

这将获取与起始数组相同的数组中的所有排序顺序。在两个数组上使用array_multisort将对第一个数组进行排序,并将该新顺序应用于第二个数组,从而为您提供所需的结果。

答案 1 :(得分:0)

您正在寻找http://php.net/manual/en/function.array-multisort.php

循环PostType并取所有type_sort_order并放在一个单独的数组中。然后使用该数组作为array_multi_sort

的参数

看起来你只是想对子数组PostType进行排序,所以只需传递那个数组