[英]how to remove a layer of nesting from an array in Laravel PHP
我有一个希望优化的过程:我有以下数组
$journeys = [
[
'journey_id' => '123',
'stops' => [
'lon' => '123123123',
'lat' => '123123123',
'stop_name' => 'foobar st'
]
...
]
...
]
此阵列包含1,000个旅程,每个旅程在停靠数组中有大约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,所以收藏品是可用的,虽然我尝试了它并没有看起来更快。
你可以收集它然后在上面映射,如下所示:
$stops = collect($journeys)->map(function($v, $k){
return $v['stops'];
});
您也可以使用array_map,以防收集效果不佳。
您可以通过将$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 eloquent模型,请使用$journeys->map(...)
journeys- $journeys->map(...)
因为它已经是一个集合实例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.