You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 23:45:03