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
相关产品推荐
相关产品推荐

