【问题标题】:PHP operators if statement 'and' and 'or'PHP 运算符 if 语句 'and' 和 'or'
【发布时间】:2012-02-22 17:45:55
【问题描述】:

我有一个 if 语句,我想控制一个字段需要输入,他们必须选择其他 2 个选项之一。

if(test1 && test || test3){
//Something here
}

我应该这样做吗:

if(test1 && (test2 || test3)){
//do stuff
}

我将如何去做。我无法理解逻辑......

【问题讨论】:

标签: php if-statement logic


【解决方案1】:
if ($requiredField && ($optional1 || $optional2)) {
  /* Do something */
}

对于要执行的 /* Do something */ 位代码,if 语句的计算结果必须为 TRUE

这意味着,$requiredField 必须是 TRUE,因此必须是 ($optional1 || $optional2)

对于$requiredFieldTRUE,它只需要填写 - 而对于第二部分:($optional1 || $optional2) optional1optional2 都可以。

编辑:

重新阅读问题后,似乎我可能误解了您。如果用户必须输入一个特定的信息,并且必须从两个选项中只选择一个(而不是两者) - 那么以下应该使用。

if ($requiredField && ($optional1 ^ $optional2)) {
  /* Do something */
}

这意味着必须填写 $optional1$optional2 - 但不能同时填写。

【讨论】:

  • 不错的命名。也许可以解释为什么这有效,因为 OP 不理解使用这个 if 语句的逻辑。 :)
【解决方案2】:

听上去,你想要后者:

if ($test1 && ($test2 || $test3)){
    //do stuff
}

将其视为需要满足的两个条件。这给了你这两个条件。第二个条件恰好是另一个条件。但是,您发布的第一个选项恰恰相反,因为如果 $test3 为真,它可以允许执行

【讨论】:

    【解决方案3】:

    test1 && (test2 || test3) 从一开始就很容易理解 - 选择 test1 && (test2 || test3) 表示后两个中的一个。很清楚。

    test1 && test || test3 - 似乎不正确:

    test1 = false
    test2 = false
    test3 = true
    
    false && false || true = true
    

    实际上并不符合您的标准。

    【讨论】:

      【解决方案4】:

      ...他们必须选择其他两个选项之一

      我只是在这里猜测一下。如果你真的想确保一个,但只选择了其他两个选项之一,那么你需要xor

      if ($required AND ($and_either XOR $or_other)) {
      

      【讨论】:

        【解决方案5】:

        您可以使用单个 if 语句和附加括号来“嵌套”if 语句。

         if(test1 && (test2 || test3)){
            //do stuff
            }
        

        【讨论】:

          【解决方案6】:

          您的逻辑是正确的,但您的 sintax 不正确,您应该按所示比较变量的值,或者干脆忽略它们,因为您正在尝试比较它们,因为它们是 TRUE。

          $test1=true;
          $test2=true;
          $test3=false;
          if($test1==true && ($test2==true || $test3==true){ echo "YES";}
          

          这将输出 YES。

          【讨论】:

          • 我觉得你有点忽略了逻辑