我试图在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";
}
?>
谢谢。
答案 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;,然后是||。括号将在其他任何内容之前进行评估,因此添加它们可以更改顺序。
答案 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'
这就是为什么你总是得到肯定的。