将两个数组与数字键组合而不覆盖旧键

时间:2010-11-14 07:05:34

标签: php arrays

我不想使用array_merge(),因为它导致我误解了所有具有相同键的值都会被覆盖。我有两个阵列

$array1 = array(0=>'foo', 1=>'bar');
$array2 = array(0=>'bar', 1=>'foo');

并希望将它们组合起来,就像这样

array(0=>'foo', 1=>'bar',2=>'bar', 3=>'foo');

5 个答案:

答案 0 :(得分:4)

array_merge() 第二个数组的值附加到第一个数组。它不会覆盖密钥。

您的示例,结果为:

  

阵列(       [0] => FOO       [1] =>酒吧       [2] =>酒吧       [3] => foo)

但是,If the input arrays have the same string keys, then the later value for that key will overwrite the previous one. If, however, the arrays contain numeric keys, the later value will not overwrite the original value, but will be appended.

除非这只是你遇到的另一个问题的一个例子吗?

答案 1 :(得分:2)

这是否回答了你的问题?我不确定完全你想要完成什么,但是根据你的描述听起来这会起作用:

$array1 = array(0=>'foo', 1=>'bar');
$array2 = array(0=>'bar', 1=>'foo');

foreach ($array2 as $i) {
    $array1[] = $i;
}

echo var_dump($array1);

答案 2 :(得分:2)

$result = array_keys(array_merge(array_flip($array1), array_flip($array2)));
var_dump($result);

答案 3 :(得分:1)

可能有更好的方法,但是:

 $newarray= array();
    $array1 = array(0=>'foo', 1=>'bar');
    $array2 = array(0=>'bar', 1=>'foo');

    $dataarrays = array($array1, $array2);

    foreach($dataarrays as $dataarray) {
        foreach($dataarray as $data) {
            $newarray[] = $data;
        }
    }

 print_r($newarray);

答案 4 :(得分:0)

如果有人偶然发现了这一点,这是当今的一种方法:

var_dump(array_merge_recursive($array1, $array2));