如何合并数组和保存键?
我有两个数组:
$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]); }