如何解决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
相关产品推荐
相关产品推荐

