【问题标题】:How to prevent foreach loop to not remove duplicates如何防止 foreach 循环不删除重复项
【发布时间】:2021-09-18 04:50:39
【问题描述】:

这是我的 json 代码

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

这是我的 php 代码

$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) {
    $cityList[$city['code']] = $city['name'];   
}

echo json_encode($cityList,true);

当我回显结果是

{"LHE":"Lahore","RWP":"Wah Cantt"}

它从列表中删除拉瓦尔品第。拉瓦尔品第和 Wah Cantt 的代码都是 RWP。我想返回这两个城市。 需要帮助。

【问题讨论】:

  • 无法将这些代码用作键,因为它们不是唯一的。给出的答案显示了一个合理的选择,但如果你不想那样做,那么根本问题仍然存在。同一个键将引用两个不同的值。生成的 JSON 将如何使用?也许我们可以为此提出另一种解决方案。

标签: php arrays json foreach


【解决方案1】:

您目前在城市代码与其名称之间存在一对一的映射,并且每个代码只能有一个这样的映射。

看起来您希望使用数组进行 1 对 n 映射(注意循环中的附加 [],它附加了当前值):

$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) {
    $cityList[$city['code']][] = $city['name'];   
}

echo json_encode($cityList,true);

输出:

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

【讨论】:

  • 感谢代码,但我想要的应该是:{"LHE":"Lahore","RWP":"Rawalpindi","RWP":"Wah Cantt"}
  • 我们在数组中不能有多个具有相同键的项目。一种方法是为一些虚拟值添加后缀或前缀,例如 RWP_1、RWP_2 等,然后当您想查看键引用字符串部分时前 _。 @汉娜詹姆斯
猜你喜欢
  • 2021-10-23
  • 1970-01-01
  • 2017-06-15
  • 1970-01-01
  • 2020-04-19
  • 1970-01-01
  • 2012-02-15
  • 2019-10-29
相关资源
最近更新 更多