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

时间:2016-07-08 14:25:20

标签: php arrays if-statement

将数组值转换为if语句的最佳方法是什么?数组值应通过AND与数组进行比较。我可以使用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 )

2 个答案:

答案 0 :(得分:3)

$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可以优雅地为一个数组执行此操作,您只需要为两个嵌套数组级别执行此操作。

答案 1 :(得分:2)

您正在做的是从数组中的值生成单个布尔值。这称为减少操作。在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);