如何合并数组和保存键?

我有两个数组:

$array1 = array('a' => 1, 'b' => 2, 'c' => 3); $array2 = array('d' => 4, 'e' => 5, 'f' => 6, 'a' => 'new value', '123' => 456); 

我想合并它们,并保持键和顺序,而不是重新索引!

如何得到这样的?

 Array ( [a] => new value [b] => 2 [c] => 3 [d] => 4 [e] => 5 [f] => 6 [123] => 456 ) 

我尝试array_merge()但它不会被保留的关键:

 print_r(array_merge($array1, $array2)); Array ( [a] => 'new value' [b] => 2 [c] => 3 [d] => 4 [e] => 5 [f] => 6 [0] => 456 ) 

我尝试联合运算符,但不会覆盖该元素:

 print_r($array1 + $array2); Array ( [a] => 1 <-- not overwriting [b] => 2 [c] => 3 [d] => 4 [e] => 5 [f] => 6 [123] => 456 ) 

我尝试交换的地方,但顺序是错的,不是我的需要:

 print_r($array2 + $array1); Array ( [d] => 4 [e] => 5 [f] => 6 [a] => new value [123] => 456 [b] => 2 [c] => 3 ) 

我不想使用循环,有没有办法提高性能?

你正在寻找array_replace()

 $array1 = array('a' => 1, 'b' => 2, 'c' => 3); $array2 = array('d' => 4, 'e' => 5, 'f' => 6, 'a' => 'new value', '123' => 456); print_r(array_replace($array1, $array2)); 

自PHP 5.3起可用。

更新

你也可以使用union 数组运算符 ; 它适用于旧版本,也可能实际上更快:

 print_r($array2 + $array1); 

@Jack发现了原生函数,可以做到这一点,但因为它只能在PHP 5.3及以上版本中使用,所以应该在5.3之前的版本中模拟这个function

  if(!function_exists("array_replace")){ function array_replace(){ $args = func_get_args(); $ret = array_shift($args); foreach($args as $arg){ foreach($arg as $k=>$v){ $ret[(string)$k] = $v; } } return $ret; } } 

array_replace_recursive()array_replace()是你正在寻找的function

 $array1 = array('a' => 1, 'b' => 2, 'c' => 3); $array2 = array('d' => 4, 'e' => 5, 'f' => 6, 'a' => 'new value', '123' => 456); var_dump(array_replace_recursive($array1, $array2)); 

演示

我认为这可能有助于如果我理解正确:

 foreach ($i = 0, $num = count($array2); $i < $num; $i++) { $array = array_merge($array1, $arrar2[$i]); }