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


issue while merging two arrays using array_merge function

我有两个关联数组。

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

我正在使用array_merge合并它们。

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

现在 $Array 3 的值是这样的。

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

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

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

+

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

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

如果您希望覆盖工作,则array_replace功能:

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

试试这段代码:)它会工作

    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);

对于关联数组,请使用

$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);