嵌套布尔值的布尔结果

Boolean result of the nested boolean values

我正在建模一个访问函数,它应该 return 基于嵌套数组上的下一个结构的布尔值,它只包含布尔值:

  1. 基于维度,应该进行 OR 或 AND 类型的比较
  2. 一级为或,下一级为与,下一级为或,依此类推
  3. 最终结果应该return TRUE 或 FALSE

例如,我有这些具有预期结果的数组:

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

显然...

array(TRUE, FALSE) -> TRUE

因为真 |错误

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

因为真 | (错误)

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

因为假 | (假 && 真)

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

因为假 | (真 && (假 | 真))

我在这里所做的只是更改嵌套数组的每一层的比较方法。

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

这是一个相互递归的例子,使用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);

这段代码可以优化,但我想它说明了这个想法