PHP合并空数上的数组

pie*_*e6k 9 php arrays merge

我有2*array我想要merge他们,但每个主题都有一些NULL rows.

$a = array(
    'a' => NULL,
    'b' => 1,
    'c' => 1
);

$b = array(
    'a' => 1,
    'b' => NULL,
    'c' => 1    
);
Run Code Online (Sandbox Code Playgroud)

所以,代码:

$c = array_merge($a,$b);
Run Code Online (Sandbox Code Playgroud)

会给$ c:

array {
  'a'=> 1
  'b'=> NULL
  'c'=>1
}
Run Code Online (Sandbox Code Playgroud)

是否有内置或简单的方法来执行保证金($a,$b),如下所示,但现在$a覆盖每个相同的索引$b.$b如果$b索引是null- 在示例中$b['b']应该覆盖,我希望被$ a索引覆盖$a

如果可能,应填充所有NULL行.

Fab*_*bio 16

我认为您可以使用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);
Run Code Online (Sandbox Code Playgroud)

这将输出

array(3) {
  ["b"]=> int(1)
  ["c"]=> int(1)
  ["a"]=> int(1)
}
Run Code Online (Sandbox Code Playgroud)

现场样品

作为附注我会补充说,使用array_filter没有第二个参数将最终删除所有NULL值以及EMPTY数组等.如果你只想删除NULL值,所以你需要使用array_filter($yourarray, 'strlen');

EDITED

如果你想要保留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);
Run Code Online (Sandbox Code Playgroud)

这将输出

array (size=4)
  'a' => int 1
  'b' => int 1
  'c' => int 1
  'd' => NULL
Run Code Online (Sandbox Code Playgroud)

现场样品