我正在建模一个访问函数,它应该根据嵌套数组的下一个结构返回布尔值,该数组只包含布尔值:
例如,我有这些具有预期结果的数组:
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的原型作为答案接受。
答案 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);
此代码可以进行优化,但我想这说明了这个想法