在 PHP 中的数组元素之间应用逻辑运算符

Apply logical operator between array elements in PHP

我有三个array,一个是包含所有布尔值的布尔数组,第二个是包含布尔数组之间的and/or操作的条件数组,第三个是路由页面数组,如果表达式为真则重定向到下一个路由页面否则不 例如数组

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) 最终的,因此它将重定向到第二页,即我需要循环中的递归表达式

这是我应用的代码

 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);

也许这会让您更接近您的目标:

 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);

请注意,您使用了两次大多数布尔值(第二个值是第一个运算符的第二个运算符和第二个运算符的第一个运算符)。

试试下面的代码:

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 );
}

您还可以使用 andor 运算符。 如果你有两个以上的运算符,你可以像这样使用 eval 函数:

$boolean = [1,0,0];
$o = ['&&','or'];
echo $r = "return ($boolean[0] $o[0] $boolean[1]) $o[1] $boolean[2];";
var_dump( eval($r) );

因为我不喜欢建议答案的复杂性,所以我深入挖掘并最终扫描了 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 谁知道...