【问题标题】:Using 'and' and 'or' in an if/else PHP statement在 if/else PHP 语句中使用 'and' 和 'or'
【发布时间】:2017-03-21 04:41:27
【问题描述】:

我试图在我的 IF/ELSE 语句中同时使用 AND 和 OR 语句,但我无法获得预期的效果。

我想要实现的是,如果“a”或“b”的值为“1”但“c”和“d”都必须为 1,那么我会得到“是”。

我的所有尝试都给了我“是”或没有成功(空白屏幕)。

<?php
$a = "0";
$b = "1";
$c = "1";
$d = "1";
if (($a == "1") || ($b == "1") && ($c == "1") && ($d == "1")) {
    echo "Yes";
    }
    else {
    echo "No";
    }

?>

谢谢。

【问题讨论】:

  • 以同样的方式使用括号,你会在数学中使用它们。
  • 顺便说一下,等式表达式周围的括号并不是真正需要的。

标签: php


【解决方案1】:

您需要额外的括号,以确保正确完成评估顺序,就像在数学中一样:

if (  (  ($a == "1") || ($b == "1")  ) && ($c == "1") && ($d == "1")) {
      ^                              ^

这样,比如说:

$a = 1;
$b = 2;
$c = 1;
$d = 2;

第一个括号将被评估为true || false。最终结果将是true

所以现在你有true &amp;&amp; ($c == "1") &amp;&amp; ($d == "1")

$c = 1,所以下一次评估将是true &amp;&amp; true &amp;&amp; ($d == 1)

$d = 2,所以下一轮将是true &amp;&amp; true &amp;&amp; false,在本例中,最终结果将是false

【讨论】:

  • 就是那个家伙!谢谢@Felippe 将在允许时接受答案(11 分钟内!)
【解决方案2】:

你需要加括号。

为什么?

因为在外括号之前先计算内括号。举个例子:

((1 == 1 &amp;&amp; (2 == 2)) || 3 == 3)

首先评估什么? 2 == 2 然后是 1 == 1 然后是 3 == 3。在你的 if 条件下,因为你混合了 AND 和 OR,你不会得到想要的效果。

( (($a == "1") || ($b == "1")) &amp;&amp; ($c == "1") &amp;&amp; ($d == "1") )

应该适合你。事实上,你可以这样做,让它看起来更好:

(($a == 1 || $b == 1) &amp;&amp; $c == 1 &amp;&amp; $d == 1)

因为没有必要将 1 放在引号中,即:"1"。 PHP 的真实性将评估1 == "1" 为真实。但是,如果您想检查包含 1 的实际字符串,则可以使用 === 运算符。

$a = 1;
$b = "1"
$a == "1";  // true
$b == 1;    // true
$a === "1"; // false
$b === "1"; // true

但是要了解更多信息,请访问此处:http://php.net/manual/en/language.operators.precedence.php

【讨论】:

    【解决方案3】:

    将首先计算相等运算符,然后是 &&,然后是 ||。括号将在其他任何内容之前进行评估,因此添加它们可以更改顺序。

    查看答案In Java, what are the boolean "order of operations"?

    【讨论】:

      【解决方案4】:

      它总是回显“是”,因为 PHP 解释器将 AND 操作放在 OR 操作之前。

      所以你的 if 语句解释如下:

      If a = 1 or b = 1 and c = 1 and d = 1 then echo 'Yes' else echo 'No'

      这就是为什么你总是得到一个是的..

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-20
        • 1970-01-01
        • 2012-02-22
        • 1970-01-01
        • 1970-01-01
        • 2015-08-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多