繁体   English   中英

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

现在$ Array3的值是这样的。

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

对于关联数组,请使用

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

试试这个代码:)它将起作用

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM