我有三个array
,一个是包含所有布尔值的布尔数组,第二个是包含和/或布尔数组之间的操作的条件数组,第三个是路由页面数组如果表达式为真,那么它将重定向到下一个路由页面,否则不会
例如数组
array(2) { [0]=> bool(true) [1]=> bool(false) ...} // boolean array
array(2) { [0]=> string(2) "or" [1]=> string(0) "" ...} // conditional operator array
array(2) { [0]=> string(1) "2" [1]=> string(1) "2" ... } // route page
表达式将成为(bool(true) or bool(false))
因此结果将是bool(true)
final,因此它将重定向到第2页,即我需要循环中的递归表达式
以下是我申请的代码
for($i=0;$i<count($boolean);$i++)
{
if($and_or[$i]=='and')
{
$operator='&&';
}
else
{
$operator='||';
}
$result=($boolean[$i].$operator.$boolean[$i+1]);
}
var_dump($result);
答案 0 :(得分:1)
由于我不喜欢建议的答案的复杂性,因此我深入研究并最终扫描了http://php.net/manual/en/ref.array.php中列出的数组函数。
这些可能不是最佳的性能,但很简单,如果您不对大型阵列进行应用,我不会考虑性能损失。
对于逻辑 AND ( && ),请使用以下命令:
var_export(!in_array(false,array(true,true,false,false,true,false))); //false
或者这个:
var_export((bool)array_product(array(true,true,false,false,true,false))); //false
对于逻辑 OR ( || ),请使用以下命令:
var_export(in_array(true,array(true,true,false,false,true,false))); //true
或者这个:
var_export(array_search(true,array(true,true,false,false,true,false))!==false); //true
我很怀疑 in_array 的速度会更快。但是有了PHP 7,谁知道...
答案 1 :(得分:0)
也许这会让你更接近目标:
for($i=0;$i<count($boolean)-1;$i++)
{
if ($i < count($and_or) && !empty($and_or[$i]) {
if($and_or[$i]=='and')
{
$operator='&&';
$result = $boolean[$i] && $boolean[$i+1];
}
else
{
$operator='||';
$result = $boolean[$i] || $boolean[$i+1];
}
$operation=($boolean[$i].$operator.$boolean[$i+1]);
}
var_dump($operation);
var_dump($result);
请注意,您使用大多数布尔值两次(第二个值是第一个操作的第二个操作符,第二个操作的第一个操作符)。
答案 2 :(得分:-1)
尝试以下代码:
for( $i = 0; $i < count( $boolean ); $i++ ) {
switch( $and_or[ $i ] ) {
case '&&':
case 'and':
$result = $boolean[ $i ] && $boolean[ $i + 1 ];
break;
case '||':
case 'or':
$result = $boolean[ $i ] || $boolean[ $i + 1 ];
break;
}
var_dump( $result );
}
您还可以使用and
,or
运算符。
如果您有两个以上的运算符,则可以使用eval
函数,如下所示:
$boolean = [1,0,0];
$o = ['&&','or'];
echo $r = "return ($boolean[0] $o[0] $boolean[1]) $o[1] $boolean[2];";
var_dump( eval($r) );