在 if/else PHP 语句中使用 'and' 和 'or'
Posted
技术标签:
【中文标题】在 if/else PHP 语句中使用 \'and\' 和 \'or\'【英文标题】: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";
?>
谢谢。
【问题讨论】:
以同样的方式使用括号,你会在数学中使用它们。 顺便说一下,等式表达式周围的括号并不是真正需要的。 【参考方案1】:您需要额外的括号,以确保正确完成评估顺序,就像在数学中一样:
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
。
【讨论】:
就是那个家伙!谢谢@Felippe 将在允许时接受答案(11 分钟内!)【参考方案2】:你需要加括号。
为什么?
因为在外括号之前先计算内括号。举个例子:
((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
【讨论】:
【参考方案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'
这就是为什么你总是得到一个是的..
【讨论】:
以上是关于在 if/else PHP 语句中使用 'and' 和 'or'的主要内容,如果未能解决你的问题,请参考以下文章