为了账号安全,请及时绑定邮箱和手机立即绑定

未能array_merge(),在循环前输出相同

未能array_merge(),在循环前输出相同

PHP
天涯尽头无女友 2022-08-05 09:28:56
我看到了许多相关的问题,没有人为我回答这个问题 - 如果这是由于我缺乏知识,我很抱歉......我有一个数组,其中每条记录如下所示,具有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个赞

您的代码不起作用的原因有两个:

  1. 赋值给 不会更改数组,它只是重新赋值变量。$contact

  2. array_merge()不就地修改数组,它将返回一个新数组。

您可以通过创建引用变量来解决这两个问题。$contact

foreach ($contacts as &$contact) {
    ...
}


查看完整回答
反对 回复 2022-08-05
  • 1 回答
  • 0 关注
  • 81 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号