在if / else PHP语句中使用'and'和'or'

时间:2016-11-07 18:22:02

标签: php

我试图在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";
    }

?>

谢谢。

4 个答案:

答案 0 :(得分:3)

您需要和额外的括号,以确保评估顺序正确完成,如数学:

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

这样,让我们​​举个例子:

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

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

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

$c = 1,再次,下一次评估将是true && true && ($d == 1)

$d = 2,因此下一轮将是true && true && false,在此示例中,最终结果将为false

答案 1 :(得分:1)

您需要添加括号。

为什么?

因为在括号外首先评估内括号。举个例子:

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

首先评估什么? 2 == 2然后是1 == 1然后是3 == 3.在你的if条件中,因为你混合了AND和OR,你将无法获得理想的效果。

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

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

(($a == 1 || $b == 1) && $c == 1 && $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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

它始终会回显Yes,因为PHP解释器在OR操作之前放置AND操作。

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

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

这就是为什么你总是得到肯定的。