PHP将两个关联数组合并为一个数组

jst*_*ann 70 php arrays associative-array multidimensional-array

$array1 = array("$name1" => "$id1");

$array2 = array("$name2" => "$id2", "$name3" => "$id3");
Run Code Online (Sandbox Code Playgroud)

我需要一个新的数组合在一起,即它会

$array3 = array("$name1" => "$id1", "$name2" => "$id2", "$name3" => "$id3");
Run Code Online (Sandbox Code Playgroud)

做这个的最好方式是什么?

对不起,我忘记了,这些ID永远不会相互匹配,但从技术上讲,名称可能,但不太可能,并且它们都需要列在一个数组中.我查看了array_merge,但不确定这是否是最好的方法.另外,你会如何对此进行单元测试?

Sam*_*ook 108

array_merge() 效率更高但有几个选择:

$array1 = array("id1" => "value1");

$array2 = array("id2" => "value2", "id3" => "value3", "id4" => "value4");

$array3 = array_merge($array1, $array2/*, $arrayN, $arrayN*/);
$array4 = $array1 + $array2;

echo '<pre>';
var_dump($array3);
var_dump($array4);
echo '</pre>';


// Results:
    array(4) {
      ["id1"]=>
      string(6) "value1"
      ["id2"]=>
      string(6) "value2"
      ["id3"]=>
      string(6) "value3"
      ["id4"]=>
      string(6) "value4"
    }
    array(4) {
      ["id1"]=>
      string(6) "value1"
      ["id2"]=>
      string(6) "value2"
      ["id3"]=>
      string(6) "value3"
      ["id4"]=>
      string(6) "value4"
    }
Run Code Online (Sandbox Code Playgroud)

  • 数组联合(+):+运算符将右手数组中剩余键的元素附加到左手,而重复键不会被覆盖.array_merge():如果输入数组具有相同的字符串键,则该键的后一个值将覆盖前一个键.但是,如果数组包含数字键,则后面的值不会覆盖原始值,但会附加.如果所有数组仅包含数字键,则结果数组将从零开始递增键. (32认同)
  • 还应该注意,如果任何参数为NULL,`array_merge`将返回NULL. (11认同)
  • array_merge比使用运算符有什么好处? (6认同)
  • 如果有整数键,那么它们将从0开始变为整数键.对array_merge要非常小心.更好地使用foreach循环来完成你想要做的事情. (3认同)

Bra*_*rad 21

退房array_merge().

$array3 = array_merge($array1, $array2);
Run Code Online (Sandbox Code Playgroud)

  • @SudhanshuSaxena考虑到我是第一个发布它的人,我不知道它是如何重复回答的. (22认同)
  • @SudhanshuSaxena不是每个人都是为了获得代表或竞争...欣赏为帮助线程启动所做的努力. (2认同)

wra*_*aud 8

另一种选择是array_replace,其他数组修改原始数组:

  • 相同的键将导致后续值覆盖原始数组
  • 将在原始阵列上创建后续阵列上的新键

这意味着将保留key => value关联,并且不会插入重复的键.

  • 这是正确答案。如果您有数字键,则 array_merge 将不起作用(所有键都将转换为一致的索引)。 (2认同)