PHP数组按类别+数组数据排序

阿里安
$data = [
           [
             'cat'=>'A',
             'catOrder'=>2,
              'data'=>[
                        ['name'=>'user', 'order'=>2],
                        ['name'=>'user', 'order'=>1],
                        ['name'=>'user', 'order'=>3]
                      ]
           ],
           [
             'cat'=>'B',
             'catOrder'=>1,
              'data'=>[
                        ['name'=>'user', 'order'=>2],
                        ['name'=>'user', 'order'=>1]
                      ]
           ]
        ]

什么是最好的方式来排序上面的数组在php中,首先通过“ catOrder”然后通过数据数组中的“ order”字段进行排序

我尝试先使用

foreach($data as &$row){ 
 usort($row['data'], function($a, $b){ return strcmp($a['order'], 
     $b['order']);});
}

接着

uasort($data, function($a, $b){ return strcmp($a['catOrder'], $b['catOrder'])});

似乎可行,但我只是想知道是否有更好,更有效的方法?

ebcode

ksort比usort快(我相当确定),因此我认为您可以通过转换将时间缩短几毫秒

foreach($data as &$row){ 
    usort($row['data'], function($a, $b){ return strcmp($a['order'], 
 $b['order']);});
}
uasort($data, function($a, $b){ return strcmp($a['catOrder'], $b['catOrder'])});

至:

foreach($data as $row){
    foreach($row['data'] as $v){
        $row['data'][$v['order']-1] = $v; //assuming 'order' starts at 1
    }
    ksort($row['data']);
    $data[$row['catOrder']-1] = $row; //assuming 'catOrder' starts at 1
}
ksort($data);

您为分配添加了一些操作,但您在排序中进行了弥补。我做了一些非常基本的基准测试,速度提升似乎达到了50%左右。不过,这是要付出额外的内存成本的,因为我已经从数组中删除了&并生成了副本。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章