PHP将数组与逻辑运算符组合在一

时间:2017-10-08 22:34:11

标签: php arrays

有没有办法组合布尔数组:

$array1: ['prop1'=>T, 'prop2'=>F, 'prop3'=>T, 'prop4'=>F, 'prop5'=>T]
$array2: ['prop1'=>T, 'prop2'=>F, 'prop3'=>F, 'prop4'=>T]

$array3: ['prop1'=>T, 'prop2'=>F, 'prop3'=>T, 'prop4'=>T, 'prop5'=>T]

使用 OR 比较?

我认为使用$array3 = $array1 | $array2会有效,但会返回一个值。

我觉得这可能是重复但我在SO上找不到相同的问题。

2 个答案:

答案 0 :(得分:0)

虽然每个数组都有相同的键,你可以使用foreach循环遍历第一个数组检查,如果相同,那么你将键和值设置为结果数组,否则如果不相等那么使用具有真值的那个

$result=array();  
foreach($array1 as $key=>$value){
  if($array1[$key]==$array2[$key] || $array2==undefined){
    $result[$key]=$value;
  }
  else{
    $result[$key]=($array1[$key]==True)?$array1[$key] : $array2[$key];
  }
}

然后循环遍历第二个数组以查看该键是否未定义,以便从第二个数组中添加键值

foreach($array2 as $key=>$value){
  if ($array1[$key]==undefined){
    $result[$key]=$value;
  }
}

答案 1 :(得分:0)

这是我能想到的最短的解决方案。它真的不那么复杂:)。首先,我们添加两个数组以确保$result中存在所有键。然后我们使用array_walk来执行逻辑操作。

我们需要3个参数。第一个是我们想要操作的$result变量。 第三个参数传递给我们的回调。我们再次使用数组求和来确保设置所有键,但这次$array2获得优先权。

第二个是我们的回调。我们从初步结果中通过引用(&)获得每个值,每个键按值获取,并将我们的愿望作为第三个参数。函数本身非常简单,我们只需将$v设置为我们想要实现的任何操作。 OR为||,AND为{x 1}或XOR为xor(但xor需要额外的括号,请参阅Operator precedence)。

Demo

&&