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