合并数组,0优先于1

时间:2012-08-31 21:42:18

标签: php arrays

基本上我需要合并两个数组,其中值0优先于1。

我找不到任何原生的php功能来做这个,也没有任何关于谷歌的功能让我感到惊讶(也许我一直在寻找错误的东西!),我想不出如何有效地做到这一点。有什么建议?

例如:

Array 1                   Array 2
  permission1 => 1            permission1 => 1
  permission2 => 1            permission2 => 1
  permission3 => 0            permission3 => 1
  permission4 => 0            permission4 => 1
                              permission5 => 1

结果数组将是。

permission1 => 1
permission2 => 1
permission3 => 0
permission4 => 0
permission5 => 1

您可能已经猜到这是一个权限系统。没有表示没有权限,0表示从不,1表示有权限。我认为最好的解决方案可能包括将两者结合在一起,看看你是否得到1或2,但我想不出如何实现这一点。

我希望这个问题很明确,如果不是,请要求澄清。提前感谢您的建议。

2 个答案:

答案 0 :(得分:3)

foreach($array2 as $key => $val) {
   if (!isset($array1[$key])){
        $array1[$key] = $val;
   }
}

答案 1 :(得分:0)

如果你首先将两者合并,然后再检索它们相交的那些,最后它只用零重新执行一次,并且foreach循环它们以设置零,你应该得到正确的答案。这应该使你想要循环的数组非常小。

$arr = array_merge( $array1, $array2 );
$intersected = array_intersect_key($array1, $array2);
$intersectWithZeroes = array_keys($intersected, 0);
foreach( $intersectWithZeroes as $key => $value ) {
    $arr[$key] = 0;
}