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

我看到了许多相关的问题,没有人为我回答这个问题 - 如果这是由于我缺乏知识,我很抱歉......


我有一个数组,其中每条记录如下所示,具有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更新这些值。令人震惊的是它是如何工作的。


天涯尽头无女友
浏览 82回答 1
1回答

蓝山帝景

您的代码不起作用的原因有两个:赋值给 不会更改数组,它只是重新赋值变量。$contactarray_merge()不就地修改数组,它将返回一个新数组。您可以通过创建引用变量来解决这两个问题。$contactforeach ($contacts as &$contact) {     ... }
打开App,查看更多内容
随时随地看视频慕课网APP