嵌套布尔值的布尔结果

时间:2015-04-11 10:49:05

标签: php arrays nested boolean

我正在建模一个访问函数,它应该根据嵌套数组的下一个结构返回布尔值,该数组只包含布尔值:

  1. 基于维度,应将其比较为OR或AND类型
  2. 第一级是OR,下一级是AND,下一级是OR等等
  3. 最终结果应返回TRUE或FALSE
  4. 例如,我有这些具有预期结果的数组:

    array(TRUE) -> TRUE
    array(FALSE) -> FALSE
    

    ...明显

    array(TRUE, FALSE) -> TRUE
    

    因为TRUE | FALSE

    array(TRUE, array(FALSE)) -> TRUE
    

    因为TRUE | (FALSE)

    array(FALSE, array(FALSE, TRUE)) -> FALSE
    

    因为FALSE | (FALSE&& TRUE)

    array(FALSE, array(TRUE, array(FALSE, TRUE))) -> TRUE
    

    因为FALSE | (TRUE&&(FALSE | TRUE))

    我在这里做的只是改变嵌套数组的每个其他级别的比较方法。

    PHP语言示例会很好,但我可以将任何可以转移到PHP的原型作为答案接受。

1 个答案:

答案 0 :(得分:2)

这是使用array_reduce函数

进行相互递归的示例
  • do_or在整个数组
  • 上应用OR运算符
  • do_and在整个数组
  • 上应用AND运算符
  • 如果数组的元素本身就是一个数组,那么这些函数会相互适用

守则:

function do_or($x,$y)
{
  if (is_array($y))
  {
    if (empty($y))
      {$y=FALSE;}
    else
      {$y=array_reduce($y,"do_and",TRUE);}
  }
  return $x||$y;
}

function do_and($x,$y)
{
  if (is_array($y))
  {
    if (empty($y))
      {$y=TRUE;}
    else
      {$y=array_reduce($y,"do_or",FALSE);}
  }
  return $x && $y;
}

$answer=array_reduce($arr,"do_or",FALSE);

此代码可以进行优化,但我想这说明了这个想法