将数组中的布尔值转换为 if 语句


Converting Boolean values inside array into if statement

数组值转换为if语句的最佳方法是什么?数组值应按 AND 比较,数组值应按 OR 进行比较。我可以使用 EVAL 来做到这一点,但寻找 EVAL 以外的其他东西。

$arr = Array(
    [0] => Array
        (
            [0] => false
            [1] => true
        )
    [1] => Array
        (
            [0] => true
            [1] => false
        )
    [2] => Array
        (
            [0] => false
        )
    [3] => Array
        (
            [0] => true
        )
    [4] => Array
        (
            [0] => true,
            [1] => true,
            [2] => true
        )
)

我想为 if 语句动态构建比较。

例如

if( ($arr[0][0] && $arr[0][1]) || ($arr[1][0] && $arr[1][1]) .... and so on )

$result = array_reduce($arr, function ($result, array $values) {
    return $result || array_reduce($values, function ($result, $value) {
        return $result && $value;
    }, true);
}, false);
if ($result) ...

一个array_reduce可以优雅地为一个数组执行此操作,您只需为两个嵌套数组级别执行此操作。

您正在做的是从数组中的值生成单个布尔值。这称为减少操作。在 php 中,我们可以做到这一点 array_reduce(..) .

array_reduce($input,
  function($prev, $item) {
    //Short-circuit if we already deduced it to be true
    if($prev) {
      return $prev;
    }
    //If one value is false, the entire thing is false
    foreach($item as $k => $v) {
      if(!$v) {
        return false;
      }
    }
    //All were true
    return true;
  }, false);