结合两个数组
我有两个这样的数组:
array( '11' => '11', '22' => '22', '33' => '33', '44' => '44' ); array( '44' => '44', '55' => '55', '66' => '66', '77' => '77' );
我想结合这两个数组,使它不包含重复,以及保持原来的关键。 例如输出应该是:
array( '11' => '11', '22' => '22', '33' => '33', '44' => '44', '55' => '55', '66' => '66', '77' => '77' );
我已经尝试过,但它正在改变它们的原始键:
$output = array_unique( array_merge( $array1 , $array2 ) );
任何解决scheme
谢谢
只要使用:
$output = array_merge($array1, $array2);
这应该解决它。 因为如果一个键出现多次(如你的例子中的'44'
,你使用了string键,一个键将会覆盖同名的前面的键。 因为在你的情况下,他们都有相同的价值无论如何不重要,它也将删除重复。
更新:我只是意识到,PHP把数字string键作为数字(整数),所以会像这样的行为,也就是说,它也重新键的键…
解决方法是重新创build密钥。
$output = array_combine($output, $output);
更新2:我总是忘记,还有一个操作符(粗体,因为这真的是你要找的!:D)
$output = $array1 + $array2;
这工作:
$output = $array1 + $array2;
你应该考虑$array1 + $array2 != $array2 + $array1
$array1 = array( '11' => 'x1', '22' => 'x1' ); $array2 = array( '22' => 'x2', '33' => 'x2' );
与$ array1 + $ array2
$array1 + $array2 = array( '11' => 'x1', '22' => 'x1', '33' => 'x2' );
和$ array2 + $ array1
$array2 + $array1 = array( '11' => 'x1', '22' => 'x2', '33' => 'x2' );
要做到这一点,你可以循环一个,并追加到另一个:
<?php $test1 = array( '11' => '11', '22' => '22', '33' => '33', '44' => '44' ); $test2 = array( '44' => '44', '55' => '55', '66' => '66', '77' => '77' ); function combineWithKeys($array1, $array2) { foreach($array1 as $key=>$value) $array2[$key] = $value; asort($array2); return $array2; } print_r(combineWithKeys($test1, $test2)); ?>
更新: KingCrunch提出了最好的解决scheme : print_r($array1+$array2);
这工作:
$a = array(1 => 1, 2 => 2, 3 => 3); $b = array(4 => 4, 5 => 5, 6 => 6); $c = $a + $b; print_r($c);