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

在PHP中的数组元素之间应用逻辑运算符,php,arrays,recursion,logical-operators,Php,Arrays,Recursion,Logical Operators,我有三个数组,一个是包含所有布尔值的布尔数组,第二个是包含布尔数组和/或运算的条件数组,第三个是路由页面数组,如果表达式为真,则重定向到下一个路由页面,否则不重定向 eg阵列 表达式将被设置为booltrue或boolfalse,因此结果将是booltrue final,因此它将重定向到第二页,即我需要循环中的递归表达式 这是我申请的代码 for($i=0;$i<count($boolean);$i++) { if($and_or[$i

我有三个数组,一个是包含所有布尔值的布尔数组,第二个是包含布尔数组和/或运算的条件数组,第三个是路由页面数组,如果表达式为真,则重定向到下一个路由页面,否则不重定向 eg阵列

表达式将被设置为booltrue或boolfalse,因此结果将是booltrue final,因此它将重定向到第二页,即我需要循环中的递归表达式

这是我申请的代码

 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)-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 );
}
请尝试以下代码:

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&&使用以下命令:

var_export(!in_array(false,array(true,true,false,false,true,false))); //false
var_export(in_array(true,array(true,true,false,false,true,false))); //true
或者这个:

var_export((bool)array_product(array(true,true,false,false,true,false))); //false
var_export(array_search(true,array(true,true,false,false,true,false))!==false); //true
对于逻辑OR | |,请使用以下命令:

var_export(!in_array(false,array(true,true,false,false,true,false))); //false
var_export(in_array(true,array(true,true,false,false,true,false))); //true
或者这个:

var_export((bool)array_product(array(true,true,false,false,true,false))); //false
var_export(array_search(true,array(true,true,false,false,true,false))!==false); //true

我猜测in_阵列的速度会更快。但是有了PHP7,谁知道呢…

因为我不喜欢建议答案的复杂性,所以我深入挖掘,最后扫描了中列出的数组函数

这些可能不是最好的性能,但是很简单,如果你不在大数组上应用,我就不会考虑性能损失。 对于逻辑AND&&使用以下命令:

var_export(!in_array(false,array(true,true,false,false,true,false))); //false
var_export(in_array(true,array(true,true,false,false,true,false))); //true
或者这个:

var_export((bool)array_product(array(true,true,false,false,true,false))); //false
var_export(array_search(true,array(true,true,false,false,true,false))!==false); //true
对于逻辑OR | |,请使用以下命令:

var_export(!in_array(false,array(true,true,false,false,true,false))); //false
var_export(in_array(true,array(true,true,false,false,true,false))); //true
或者这个:

var_export((bool)array_product(array(true,true,false,false,true,false))); //false
var_export(array_search(true,array(true,true,false,false,true,false))!==false); //true


我猜测in_阵列的速度会更快。但是PHP7出来了,谁知道…

条件运算符数组的第二个元素是否有空值?一些问题:递归与此有什么关系?第三个数组是否与问题相关?备注:您所做的是附加字符串,而不是应用逻辑运算符。使用你的代码,你也将超出数组的末尾,$BooLe[$i++]。是的,空白值表示条件运算符的末尾,并且不会有更多的提前操作。done@Gerriet那么如何解决和表达呢,,第三个数组是最终结果,如果表达式看起来是真的,那么页面重定向就会出现,我在调查的页面逻辑中应用了这个条件。关于更多细节,条件运算符数组的第二个元素是否有空值?一些问题:递归与此有什么关系?第三个数组是否与问题相关?备注:您所做的是附加字符串,而不是应用逻辑运算符。使用你的代码,你也将超出数组的末尾,$BooLe[$i++]。是的,空白值表示条件运算符的末尾,并且不会有更多的提前操作。done@Gerriet那么如何解决和表达呢,,第三个数组是最终结果,如果表达式看起来是真的,那么页面重定向就会出现,我在调查的页面逻辑中应用了这个条件。有关更多详细信息,如果数组中存在两个以上的布尔条件,该条件是否适用,假设布尔值中有三个值,如果在1和2之间存在or运算,则该值是否适用,然后该结果将适用于三个3和条件,如果数组中存在两个以上的布尔条件,则该值是否适用,假设布尔值中有三个值,如果在1和2之间存在or运算,则该值是否适用,然后该结果将适用于三个3和条件,如果数组中存在两个以上的布尔条件,则该值是否适用,假设布尔值中有三个值,如果在1和2之间存在or运算,则该值适用于三个3 and条件,但and或条件是动态的,它是用户定义的array2{[0]=>string2或[1]=>string0…},用户将defined@testqa您可以从用户处获取一个逻辑字符串,并传递给eval函数以执行此操作。关心安全问题。我的问题是,如果存在两个或三个布尔值,我将如何区分它们,然后相应地echo$r=return$boolean[0]$o[0]$boolean[1]$o[1]$boolean[2];;我的意思是说它应该是动态的。你提出了一个关于eval的好主意,谢谢。你能详细说明一下如何使它动态地成为逻辑表达式吗?这只是我的主要问题,意思是这个表达式echo$r=return$boolean[0]$o[0]$boolean[1]$o[1]$boolean[2];;应动态设置如果数组中存在两个以上的布尔条件,将应用什么
icable,假设布尔值中有三个值,如果在1和2之间存在or运算,则该值是否适用,然后该结果将适用于三个3 and条件–但and或条件是动态的,它是用户定义的array2{[0]=>string2或[1]=>string0…},用户将defined@testqa您可以从用户处获取一个逻辑字符串,并传递给eval函数以执行此操作。关心安全问题。我的问题是,如果存在两个或三个布尔值,我将如何区分它们,然后相应地echo$r=return$boolean[0]$o[0]$boolean[1]$o[1]$boolean[2];;我的意思是说它应该是动态的。你提出了一个关于eval的好主意,谢谢。你能详细说明一下如何使它动态地成为逻辑表达式吗?这只是我的主要问题,意思是这个表达式echo$r=return$boolean[0]$o[0]$boolean[1]$o[1]$boolean[2];;应该是动态的