我看到了许多相关的问题,没有人为我回答这个问题 - 如果这是由于我缺乏知识,我很抱歉......我有一个数组,其中每条记录如下所示,具有1多个联系人:$contacts[{internal_id}]=> array(3) { [0]=> array(6) { ["name"]=> string(13) "matching name" ["bphone"]=> string(13) "(123)345-5678" ["cphone"]=> string(13) "(321)345-6857" ["hphone"]=> string(13) "(123)543-5790" ["email"]=> string(0) "" ["email2"]=> string(0) "" } [1]=> array(6) { ["name"]=> string(13) "matching name" ["bphone"]=> string(13) "(123)345-5678" ["cphone"]=> string(0) "" ["hphone"]=> string(0) "" ["email"]=> string(20) "margethis@please.com" ["email2"]=> string(21) "mergethis2@please.com" } [2]=> array(6) { ["name"]=> string(17) "not matching name" ["bphone"]=> string(13) "(123)987-6453" ["cphone"]=> string(13) "(321)789-3546" ["hphone"]=> string(0) "" ["email"]=> string(21) "email@popularmail.com" ["email2"]=> string(22) "email2@popularmail.com" } }我想合并任何类似的名字,每条记录,保留相关的联系信息。试试这个: $i = 1; //1 > 0 so no need to +1 each time it's used in this case foreach($contacts as $contact){ if($contact['name'] == $contacts[$i]['name']){ $contact = array_merge($contact, $contacts[$i]); unset($contacts[$i]); } $i++; }我的预期/期望输出将是:[{internal_id}]=> array(2) { [0]=> array(6) { ["name"]=> string(13) "matching name" ["bphone"]=> string(13) "(123)345-5678" ["cphone"]=> string(13) "(321)345-6857" ["hphone"]=> string(13) "(123)543-5790" ["email"]=> string(20) "margethis@please.com" ["email2"]=> string(21) "mergethis2@please.com" }但是这个循环没有任何影响,至少不是我能找到的。我的实际输出与初始数组匹配。我在这里错过了什么?编辑/更新:通过引用/值传递的简单混合。感谢@Barmar的快速解决方案。数组中没有反映任何更改,因为我从未真正告诉php更新这些值。令人震惊的是它是如何工作的。
1 回答

蓝山帝景
TA贡献1843条经验 获得超7个赞
您的代码不起作用的原因有两个:
赋值给 不会更改数组,它只是重新赋值变量。
$contact
array_merge()
不就地修改数组,它将返回一个新数组。
您可以通过创建引用变量来解决这两个问题。$contact
foreach ($contacts as &$contact) { ... }
- 1 回答
- 0 关注
- 81 浏览
添加回答
举报
0/150
提交
取消