我认为您可以使用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)
}
LIVE SAMPLE
作为旁注,我要补充一点,在没有第二个参数的情况下使用 array_filter 最终会删除所有 NULL 值以及 EMPTY 数组等。如果您只想删除 NULL 值,那么您将需要使用array_filter($yourarray, 'strlen');
已编辑
如果你想保留NULL,如果两个数组都有相同的键并且假设两个数组有相同数量的键/值,那么你需要在你的数组中循环并构建一个新的数组来保留@987654334 @你需要的地方
$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
LIVE SAMPLE