Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 合并两个数组,保留两个数组的值_Php_Arrays - Fatal编程技术网

Php 合并两个数组,保留两个数组的值

Php 合并两个数组,保留两个数组的值,php,arrays,Php,Arrays,我正在尝试使用array_merge合并到数组,但是我要么做得不对,要么这个函数没有达到我期望的效果 这里有两个数组 array\u merge($array[0],$array[1]); 大堆 ( [0]=>阵列 ( [苹果]=>1 [梨]=> [橙子]=> [葡萄]=> [西瓜]=>1 ) [1] =>阵列 ( [苹果]=> [梨]=>1 [橙子]=>1 [葡萄]=> [西瓜]=> [菠萝]=> [香蕉]=> [柠檬]=> ) ) 我把这个拿回来了,它似乎正在使用第二个数组 Array

我正在尝试使用array_merge合并到数组,但是我要么做得不对,要么这个函数没有达到我期望的效果

这里有两个数组

array\u merge($array[0],$array[1]);
大堆
(
[0]=>阵列
(
[苹果]=>1
[梨]=>
[橙子]=>
[葡萄]=>
[西瓜]=>1
)
[1] =>阵列
(
[苹果]=>
[梨]=>1
[橙子]=>1
[葡萄]=>
[西瓜]=>
[菠萝]=>
[香蕉]=>
[柠檬]=>
)
)
我把这个拿回来了,它似乎正在使用第二个数组

 Array
        (
            [apples] => 
            [pears] => 1
            [oranges] => 1
            [grapes] => 
            [melons] => 
            [pineapples] => 
            [bananas] => 
            [lemons] => 
        )
但我期望的结果是:

Array
(
    [0] => Array
        (
            [apples] => 1
            [pears] => 1
            [oranges] => 1
            [grapes] => 
            [melons] => 1
            [pineapples] => 
            [bananas] => 
            [lemons] => 

        )
)
非常感谢您的帮助。

手册:

如果输入数组具有相同的字符串键,则该键的后一个值将覆盖前一个值

如果希望其中一个中包含值的值覆盖其中一个中的空值,则过滤掉空值:

$result = array_merge(array_filter($array[0]), array_filter($array[1]));
但是,如果两个数组都有相同的键,并且都有一个值,那么这仍然会产生第二个值。此外,这将不会保留两个数组(如
Pinepples
)中的空键,因此您可能需要循环并检查要包含或不包含的内容,或者可能需要:

$result = array_merge(array_merge(array_filter($array[0]), array_filter($array[1])),
                      array_filter($array[0]),
                      array_filter($array[1]));

如果要保留两个数组中的空键,可以自己循环和合并数组

您可以获取第一个数组,该数组在foreach循环中从第二个数组添加键

$result = $array[0];
foreach ($array[1] as $key => $value) {
    if (empty($result[$key])) {
        $result[$key] = $value;
    }
}
如果存在冲突的键,这将保留第一个数组中的值。如果您希望保留来自第二个数组的值,可以执行以下操作

$result = $array[0];
foreach ($array[1] as $key => $value) {
    $result[$key] = $value;
}

方法一。使用
array\u walk\u recursive

array_walk_recursive($a, function($v, $k) use (&$r){
    isset($r[$k]) ? (!$v ? '' : ($r[$k] = $v)) : ($r[$k] = $v); 
});
print_r($r);
工作示例:

方法2。使用
foreach
和三元运算符进行迭代

$r = [];
foreach($a as $k => $v){
  foreach($v as $k1 => $v1){
    isset($r[$k1]) ? ($v1==1 ? ($r[$k1] = $v1) : '') : ($r[$k1] = $v1);
  }
}

工作示例:-

From:“如果输入数组具有相同的字符串键,则该键的后一个值将覆盖前一个值。”在进行合并之前,您可能希望删除任何具有空值的键。如果第一个数组的'apples'=>1,而第二个数组的'apples'=>1呢?您想在结果数组中成为'apples'=>2还是什么?如果是,您需要自己编写代码,而不是简单地将函数应用为array\u merge。如果
apple=>1
在两个数组中都有,会发生什么?然后它将成为最后一个数组中的
apple=>2
,或者
apple=>1
将保留下来??你放弃了吗???