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

Laravel 如何提取数组所需数据并转换为指定地址结构化格式

你可以直接修改遍历逻辑,提取terms中的value字段按索引映射为对应结构化键即可,修改后的代码如下:

foreach ($dataArray as $value) {
    // 提取terms数组中所有value值生成一维索引数组
    $termValues = array_column($value['terms'], 'value');
    
    $addressArray[] = [
        'id' => $value['place_id'],
        'label' => $value['label'],
        'value' => $value['value'],
        'address' => [
            'number' => $termValues[0] ?? '',
            'street' => $termValues[1] ?? '',
            'city' => $termValues[2] ?? '',
            'state' => $termValues[3] ?? '',
            'country' => $termValues[4] ?? '',
        ]
    ];
}

dd($addressArray);

如果你的业务中存在如示例中4段结构的特殊地址(街道在前、门牌号在后、无省/州字段),可以增加长度判断适配不同场景:

foreach ($dataArray as $value) {
    $termValues = array_column($value['terms'], 'value');
    $address = [];
    $termCount = count($termValues);

    if ($termCount === 5) {
        // 适配标准5段地址:门牌号、街道、城市、省/州、国家
        $address = [
            'number' => $termValues[0],
            'street' => $termValues[1],
            'city' => $termValues[2],
            'state' => $termValues[3],
            'country' => $termValues[4],
        ];
    } elseif ($termCount === 4) {
        // 适配4段地址:街道、门牌号、城市、国家
        $address = [
            'number' => $termValues[1],
            'street' => $termValues[0],
            'city' => $termValues[2],
            'state' => '',
            'country' => $termValues[3],
        ];
    }

    $addressArray[] = [
        'id' => $value['place_id'],
        'label' => $value['label'],
        'value' => $value['value'],
        'address' => $address
    ];
}

dd($addressArray);

代码说明

  • 使用array_column直接批量提取terms的value字段,无需逐行遍历terms,代码更简洁易读
  • 加入空合并运算符??避免对应索引不存在时抛出Notice错误
  • 可选的长度判断逻辑可以根据你实际的地址规则灵活调整

内容的提问来源于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 22:15:03