我正在尝试使用array_merge合并到数组,但是我做的不对,或者此函数没有达到我的期望。
这里有2个数组
array_merge($array[0], $array[1]);
Array
(
[0] => Array
(
[apples] => 1
[pears] =>
[oranges] =>
[grapes] =>
[melons] => 1
)
[1] => Array
(
[apples] =>
[pears] => 1
[oranges] => 1
[grapes] =>
[melons] =>
[pineapples] =>
[bananas] =>
[lemons] =>
)
)
我回来了,好像只是在使用第二个数组
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] =>
)
)
任何帮助,将不胜感激。
答案 0 :(得分:1)
从手册:
如果输入数组具有相同的字符串键,则该键的后一个值 将覆盖前一个。
如果您希望其中一个包含值来覆盖其中任何一个的空值,请过滤出空值:
$result = array_merge(array_filter($array[0]), array_filter($array[1]));
但是,如果两个数组都具有相同的键并且都具有一个值,那么这仍将导致第二个值。另外,这不会在两个数组(例如pineapples
)中保留键为空的键,因此您可能需要循环查看是否要包含的键,或者可能是:
$result = array_merge(array_merge(array_filter($array[0]), array_filter($array[1])),
array_filter($array[0]),
array_filter($array[1]));
答案 1 :(得分:1)
方法一。使用array_walk_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);
}
}
工作示例:-https://3v4l.org/WXCpd
答案 2 :(得分:0)
如果要在两个数组中都保留空键,则可以自己循环和合并数组。
您可以使用第一个数组,该数组在foreach循环中从第二个数组添加键。
$pdo->exec('INSERT INTO Jobs VALUES (...)');
$jobId = $pdo->lastInsertId();
notify_new_job_to_worker($jobId); // how?
如果键冲突,它将保留第一个数组中的值。如果您想保留第二个数组中的值,则可以执行以下操作。
$result = $array[0];
foreach ($array[1] as $key => $value) {
if (empty($result[$key])) {
$result[$key] = $value;
}
}