在 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 &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'

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

【讨论】:

以上是关于在 if/else PHP 语句中使用 'and' 和 'or'的主要内容,如果未能解决你的问题,请参考以下文章

PHP if...else...elseif 语句

表单验证灯箱 php if/else 语句

PHP implode 爆炸逗号分隔值用于 if else 语句

PHP控制语句之“if...else”语句

PHP 结构语句

在购物车页脚中重新加载 PHP If/Else 语句而不重新加载整个页面? ( XT 浮动车)