PHP if 语句 strpos === false with or ||

PHP if statement strpos === false with an or ||

我试图让 if 语句回显等于 true 但它等于 false。我做错了什么?

$line-2 有时为 5%,有时为 0%。所以它像那样变化。我将如何为这两种情况编写 if 语句?

所以基本上,我希望它在变量 line_2 为 0% 或 5% 时回显等于 true。如果变量不是 0% 或 5%,我只希望它回显等于 false。

$line_2 = '5%'; // this will be random. Can be 0%. Can be 5%. Can be 25%.

if (strpos($line_2, '5') === false || strpos($line_2, '0') === false) {
    echo 'equals false';
} else {
    echo 'equals true';
}

更多说明。

它说 echo 'equals false' 那里实际上有一个命令可以执行另一个 php 脚本。仅当 line_2 不等于 5% 或不等于 0% 时,我才需要执行该脚本。

希望总结一下。

根据 OP 的编辑,您应该反转 if 条件检查逻辑。执行以下操作:

$line_2 = '5%'; // Or it can be 0%

if (strpos($line_2, '5') !== false || strpos($line_2, '0') !== false) {
    echo 'equals true'; // 0 or 5 is found in the string
} else {
    echo 'equals false';
}

改用&&

如果该字符为“5”或“0”,则在该 if 语句中使用 OR 运算符 return 为真

所以,因为strpos($line_2, '0') === false会returntrue,你的语句会变成

if(false || true)

因此回显 'equals false',而使用 AND

if(false && true)

将是错误的,给你 'equals true'

你真的不需要 strpos() 除非 $line_2 有时可能包含更多字符串。

<?php

$line_2 = '5%';

$statement = 'equals false';    //Set the default message
if ($line_2 === '5%' || $line_2 === '%0') {  //Check if $line_2 equals 5% or 2%. Note the strong comparison since $line_2 is a string.
    $statement = 'equals true';
}

echo $statement;

你的问题源于对你否定条件语句的方式的误解。

如果 $line_2 包含 05,您提到要回显 true;但是,您的 if 语句会检查与 echo false 相反的条件,如果条件失败,则将 echo true 。所以我们需要把条件从if line contains 0 or line contains 5改成if not (line contains 0 or line contains 5).

实现此目的的方法是考虑 De Morgan's laws。具体来说,当您在逻辑 OR 或逻辑 AND 之间分配否定时,以下情况成立:

  • not (A OR B) = (not A) AND (not B)
  • not (A AND B) = (not A) OR (not B)

也就是说,您分配否定并将逻辑运算符更改为其相反。

在这种情况下,既然你想完成not (line contains 0 or line contains 5),你应该分配它,这样你就可以获得(not line contains 0) and (not line contains 5),它看起来像这样:

$line_2 = '5%'; // this will be random. Can be 0%. Can be 5%. Can be 25%.

if (strpos($line_2, '5') === false && strpos($line_2, '0') === false) {
    echo 'equals false';
} else {
    echo 'equals true';
}

您当前代码的问题是您有一个类似于 if (not line contains 0) or (not line contains 5) 的解决方案。两者之间的区别仅在于连接两个条件的逻辑运算符,您使用的是 or 但实际上应该使用 and.