我认为您可以使用
array_filter
函数来删除数组中的空值,然后将它们合并。
$a = array(
'a' => NULL,
'b' => 1,
'c' => 1
);
$b = array(
'a' => 1,
'b' => NULL,
'c' => 1
);
$b = array_filter($b);
$a = array_filter($a);
$c = array_merge($a, $b);
var_dump($c);
这将输出
array(3) {
["b"]=> int(1)
["c"]=> int(1)
["a"]=> int(1)
}
实时演示
顺便提一下,如果使用array_filter
不带第二个参数,则会删除所有的NULL
值以及EMPTY
数组等。 如果只想删除NULL
值,则需要使用array_filter($yourarray, 'strlen');
编辑
如果您想在两个数组具有相同的键且都为NULL
时保留它,并假设两个数组具有相同数量的键/值,则需要循环遍历您的数组并构建一个新数组,在需要时保留NULL
$a = array(
'a' => NULL,
'b' => 1,
'c' => 1,
'd' => NULL
);
$b = array(
'a' => 1,
'b' => NULL,
'c' => 1,
'd' => NULL,
);
$c = array();
foreach($a as $key => $val)
{
if($key == NULL && $b[$key] == NULL)
{
$c[$key] = $val;
} else if($key != NULL && $b[$key] == NULL) {
$c[$key]= $val;
} else if($key != NULL && $b[$key] != NULL) {
$c[$key]= $b[$key];
} else {
$c[$key]= $b[$key];
}
}
var_dump($c);
这将输出
array (size=4)
'a' => int 1
'b' => int 1
'c' => int 1
'd' => NULL
实时样例