PHP将数组与逻辑运算符相结合

PHP将数组与逻辑运算符相结合,php,arrays,Php,Arrays,是否有一种组合布尔数组的方法: $array1: ['prop1'=>T, 'prop2'=>F, 'prop3'=>T, 'prop4'=>F, 'prop5'=>T] $array2: ['prop1'=>T, 'prop2'=>F, 'prop3'=>F, 'prop4'=>T] 进入 使用还是比较 我认为使用$array3=$array1 |$array2可以工作,但它只返回一个值 我觉得这可能是重复的,但我没有找到相同的问题。当每

是否有一种组合布尔数组的方法:

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

使用还是比较

我认为使用
$array3=$array1 |$array2
可以工作,但它只返回一个值


我觉得这可能是重复的,但我没有找到相同的问题。

当每个数组都有相同的键时,可以使用foreach循环通过第一个数组检查,如果相等,则将键和值设置为result数组;如果不相等,则使用具有真值的数组

$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;
  }
}

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

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

第二个是我们的回拨。我们通过引用(&)从初步结果中获取每个值,通过值获取每个键,并将我们的愿望作为第三个参数。函数本身非常简单,我们只需将
$v
设置为我们想要实现的任何操作<代码>| |表示或,
&
表示和或xor表示异或(但xor需要附加括号,请参阅)


您不能有两个名称相同的键:
$array3['prop1']
,猜测您的意思是
prop3
?您不能有重复的键,但我假设两个数组中
prop1
的第二个实例都是
prop3
。如果是这样的话,如何“组合”它们,因为它们有不同的价值观?你是想说,如果其中一个数组包含相关键的
true
值,请推到第三个数组?@Scuzzy看起来像是一个设置MVCEFixed的打字错误,我错了,伙计们!
foreach($array2 as $key=>$value){
  if ($array1[$key]==undefined){
    $result[$key]=$value;
  }
}
$array1 = ['prop1'=>TRUE, 'prop2'=>FALSE, 'prop3'=>TRUE, 'prop4'=>TRUE];
$array2 = ['prop1'=>TRUE, 'prop2'=>TRUE, 'prop3'=>FALSE, 'prop5'=>FALSE];
$result = $array1 + $array2;

array_walk($result, function(&$v, $k, $a){
   $v = $v || $a[$k]; //Here you can change the operation
}, $array2+$array1);

var_dump($result);