繁体   English   中英

如何从Laravel PHP中的数组中删除一层嵌套

[英]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_idstops阵列,和取消原journey_id

然后使用->all()返回新数组。

注意 :如果使用laravel eloquent模型,请使用$journeys->map(...) journeys- $journeys->map(...)因为它已经是一个集合实例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM