我有一个我希望优化的过程:我有以下数组
$journeys = [
[
'journey_id' => '123',
'stops' => [
'lon' => '123123123',
'lat' => '123123123',
'stop_name' => 'foobar st'
]
...
]
...
]
此数组包含1,000趟旅程,每个站点在Stops数组中大约有40-50站。
我想要做的是删除嵌套,所以最终得到这样的东西:
'stops' => [
'journey_id' => '123',
'lon' => '123123123',
'lat' => '123123123',
'stop_name' => 'foobar st'
]
目前,我唯一能做到这一点的方法是循环遍历数组中的每个项目,然后每个停靠点并创建一个新数组。
像这样:
$stops = [];
foreach($journeys as $journey){
foreach($journey['stops'] as $stop){
array_push($stops, [
'journey_id' => $journey['journey_id'],
'lon' => '123123123',
'lat' => '123123123',
'stop_name' => 'foobar st'
])
}
}
此过程很慢!有谁知道我可以更快地做到这一点?
我正在使用laravel,因此可以进行收集,尽管我尝试了一下,但似乎并没有更快。
答案 0 :(得分:0)
您可以收集它,然后在其上进行映射,如下所示:
$stops = collect($journeys)->map(function($v, $k){
return $v['stops'];
});
如果收集不适合您,您还可以使用array_map。
答案 1 :(得分:0)
您可以通过向集合中添加$journeys
并使用->map()
集合方法来映射应如何返回数据来实现此目的:
$journeys = collect($journeys)->map(function ($journey, $key) {
$journey['stops']['journey_id'] = $journey['journey_id'];
unset($journey['journey_id']);
return $journey;
})->all();
在这里,我们创建了一系列旅程。我们遍历每个过程,将journey_id
添加到stops
数组中,然后取消设置原始的journey_id
。
然后使用->all()
返回新数组。
注意:如果使用Laravel雄辩的模型,请使用$journeys->map(...)
,因为它已经是一个集合实例。