Php 使用array\u merge函数合并两个数组时出现问题

Php 使用array\u merge函数合并两个数组时出现问题,php,arrays,Php,Arrays,我有两个关联数组 $Array1 = array( 'abc'=> 'abc', 'def'=> 'def' ); $Array2 = array( '123'=> '123', '456'=> '456' ); 我正在使用array\u merge合并它们 $Array3 = array_merge($Array1, $Array2); 现在$Array3的值是这样的 Array ( [abc] => abc [def] =>

我有两个关联数组

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

$Array2 = array(
 '123'=> '123',
 '456'=> '456'
);
我正在使用array\u merge合并它们

$Array3 = array_merge($Array1, $Array2);
现在$Array3的值是这样的

Array
(
    [abc] => abc
    [def] => def
    [0] => 123
    [1] => 456
)
在我阅读php手册之前,它看起来真的很奇怪,该手册说,在结果数组中,带有数字键的输入数组中的值将用从零开始的递增键重新编号

我的任务是如何合并两个数组而不丢失它们的关联键。 两个数组都可以有公共的
键,我不想丢失我的信息:(

作者
+

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

$Array2 = array(
 '123'=> '123',
 '456'=> '456'
);
var_dump($Array1 + $Array2);
这将保留索引,但请注意,如果第一个数组中存在相同的键,则不会覆盖第一个数组的值

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

var_dump(array_replace($Array1, $Array2));
通过
+

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

$Array2 = array(
 '123'=> '123',
 '456'=> '456'
);
var_dump($Array1 + $Array2);
这将保留索引,但请注意,如果第一个数组中存在相同的键,则不会覆盖第一个数组的值

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

var_dump(array_replace($Array1, $Array2));
通过
+

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

$Array2 = array(
 '123'=> '123',
 '456'=> '456'
);
var_dump($Array1 + $Array2);
这将保留索引,但请注意,如果第一个数组中存在相同的键,则不会覆盖第一个数组的值

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

var_dump(array_replace($Array1, $Array2));
通过
+

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

$Array2 = array(
 '123'=> '123',
 '456'=> '456'
);
var_dump($Array1 + $Array2);
这将保留索引,但请注意,如果第一个数组中存在相同的键,则不会覆盖第一个数组的值

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

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

对于关联数组,请使用

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

对于关联数组,请使用

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

对于关联数组,请使用

$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);
试试这个代码:)它会工作的

    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);
试试这个代码:)它会工作的

    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);
试试这个代码:)它会工作的

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

两个数组都可以有公共密钥,我不想丢失我的信息:(.我更新了这个问题。@RiteshChandora那么你期望的结果是什么,
'common\u key'=>array('value1','value2')
?这两个数组都是多维的。你的代码不适合我。array\u replace\u recursive()工作得很好。谢谢你的帮助,两个数组都可以有公共密钥,我也不想泄露我的信息。:(.我更新了这个问题。@RiteshChandora那么你期望的结果是什么,
'common\u key'=>array('value1','value2')
?这两个数组都是多维的。你的代码不适合我。array\u replace\u recursive()工作得很好。谢谢你的帮助,两个数组都可以有公共密钥,我也不想泄露我的信息。:(.我更新了这个问题。@RiteshChandora那么你期望的结果是什么,
'common\u key'=>array('value1','value2')
?这两个数组都是多维的。你的代码不适合我。array\u replace\u recursive()工作得很好。谢谢你的帮助,两个数组都可以有公共密钥,我也不想泄露我的信息。:(.我更新了这个问题。@RiteshChandora那么你期望的结果是什么,
'common\u key'=>array('value1','value2')
?这两个数组都是多维的。你的代码不适合我。array\u replace\u recursive()工作得很好。谢谢你的帮助,两个数组都可以有公共密钥,我也不想泄露我的信息。:(.我更新了question.Hm,我已经更新了(在这种情况下,您将拥有这些键的值数组)这两个数组都可以有公共键,我不想丢失我的信息。:(.我更新了question.Hm,我已经更新了(在这种情况下,您将拥有这些键的值数组)两个数组都可以有公共密钥,我不想丢失我的信息。:(.我更新了问题.Hm,我已经更新了(在这种情况下,您将有这样的密钥的值数组)两个数组都可以有公共密钥,我也不想丢失我的信息。:(.我更新了问题.Hm,我已经更新了。)(因此,在这种情况下,您将拥有此类键的值数组)