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

如何解决PHP中foreach循环处理同code城市时元素被覆盖的问题

问题原因

你当前的实现将城市code作为关联数组的唯一键,PHP关联数组不允许重复键名,后写入的同键值元素会直接覆盖已有元素,这就是Rawalpindi丢失的核心原因。

实现方案

方案1:同code城市存储为数组(推荐,保留code索引能力)

该方案既保留了按code快速查询城市的能力,又能存储所有同code的城市:

$city_result = '[{"name":"Lahore","code":"LHE"},{"name":"Rawalpindi","code":"RWP"},{"name":"Wah Cantt","code":"RWP"}]';

$cityList = [];
$cities = (array)json_decode($city_result, 1);
foreach ($cities as $city) {
    // 首次遇到对应code时先初始化空数组
    if (!isset($cityList[$city['code']])) {
        $cityList[$city['code']] = [];
    }
    // 将城市名追加到对应code的数组中
    $cityList[$city['code']][] = $city['name'];
}

echo json_encode($cityList, JSON_UNESCAPED_UNICODE);

输出结果:

{"LHE":["Lahore"],"RWP":["Rawalpindi","Wah Cantt"]}

方案2:保留原始列表结构

如果你不需要按code快速索引,直接保留原始数组结构即可:

$city_result = '[{"name":"Lahore","code":"LHE"},{"name":"Rawalpindi","code":"RWP"},{"name":"Wah Cantt","code":"RWP"}]';
$cities = json_decode($city_result, 1);
// 如果需要过滤仅保留name字段可以循环处理,不需要则直接输出
echo json_encode($cities, JSON_UNESCAPED_UNICODE);

输出结果:

[{"name":"Lahore","code":"LHE"},{"name":"Rawalpindi","code":"RWP"},{"name":"Wah Cantt","code":"RWP"}]

内容的提问来源于stack exchange,提问作者Hannah James

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 12:51:01