Laravel中如何检查PHP数组指定字段并提取对应long_name值
Laravel 地址组件类型提取实现
实现思路
你当前的遍历路径有误,目标地址数据存储在$dataArray['result']['address_components']节点下,我们只需要遍历该节点的所有组件,匹配目标类型后提取对应long_name即可。
代码实现
写法1:原生PHP遍历
$newArray = []; // 目标提取类型,后续新增类型直接在此数组追加即可 $targetTypes = ['street_number', 'route', 'locality', 'political']; $addressComponents = $dataArray['result']['address_components'] ?? []; foreach ($addressComponents as $component) { foreach ($component['types'] as $type) { if (in_array($type, $targetTypes)) { $newArray[$type] = $component['long_name']; } } } dd($newArray);
写法2:Laravel 集合链式操作(更简洁)
$targetTypes = ['street_number', 'route', 'locality', 'political']; $newArray = collect($dataArray['result']['address_components'] ?? []) ->flatMap(fn($component) => array_fill_keys($component['types'], $component['long_name'])) ->only($targetTypes) ->toArray(); dd($newArray);
注意:如果存在多个同类型的地址组件,上述代码会保留最后一个匹配项的
long_name。如果需要保留所有匹配项,可将赋值逻辑改为$newArray[$type][] = $component['long_name'],对应类型的最终值会是存储所有匹配结果的数组。
输出结果示例
执行上述代码后得到的结果如下:
array:4 [ "street_number" => "19" "route" => "Becket Street South" "locality" => "senroy" "political" => "senroy" ]
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

