使用array_merge函数合并两个数组时出现问题

时间:2014-04-04 09:46:05

标签: php arrays

我有两个关联数组。

$Array1 = array(
 'abc'=> 'abc',
 'def'=> 'def'
);

$Array2 = array(
 '123'=> '123',
 '456'=> '456'
);

我正在使用array_merge合并它们。

$Array3 = array_merge($Array1, $Array2);

现在$ Array3的值就是这样。

Array
(
    [abc] => abc
    [def] => def
    [0] => 123
    [1] => 456
)

看起来很奇怪,直到我阅读php手册,其中输入数组中带有数字键的值将使用从结果数组中的零开始的递增键重新编号array_merge manual

我的任务如何在不丢失关联键的情况下合并两个数组。 两个数组都可以有共同KEYS,我也不想丢失我的信息。 :(

3 个答案:

答案 0 :(得分:1)

+

$Array1 = array(
 'abc'=> 'abc',
 'def'=> 'def'
);

$Array2 = array(
 '123'=> '123',
 '456'=> '456'
);
var_dump($Array1 + $Array2);

这将保留索引,但请注意,如果第一个数组中存在相同的键,则不会覆盖第一个数组的值。

如果你想要覆盖工作,那么就有 array_replace 功能:

var_dump(array_replace($Array1, $Array2));

答案 1 :(得分:1)

对于关联数组,请使用

$result = $Array1 + $Array2;

- 但请注意,对于数字键,这也将重新编制索引:

$Array1 = array(
 'abc',
 'def'=> 'def'
);

$Array2 = array(
 '123',
 '456'
);
var_dump($Array1 + $Array2);
//array(3) { [0]=> string(3) "abc" ["def"]=> string(3) "def" [1]=> string(3) "456" } 

如果阵列中有相同的键,则可以使用:

$result = array_reduce(array_keys($Array1), function($c, $x) use ($Array1)
{
    $c[$x] = isset($c[$x])
       ?array_merge((array)$c[$x], [$Array1[$x]])
       :$Array1[$x];
    return $c;
}, $Array2);

答案 2 :(得分:1)

试试这段代码:)它会起作用

    function my_merge($array1,$array2)
    {
       foreach($array2 as $key => $value)
       {
         $array1[$key] = $value;
       }
       return $array1;
    }

    $Array1 = array(
          'abc'=> 'abc',
          'def'=> 'def'
    );

     $Array2 = array(
           '123'=> '123',
           '456'=> '456'
     );

     $Array3 = my_merge($Array1, $Array2);