$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'])});
似乎可行,但我只是想知道是否有更好更好的方法?
答案 0 :(得分:1)
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%左右。不过,由于我已经从数组中删除了&,因此产生了一个副本,但这是以额外的ram为代价的。