PHP if语句strpos === false或或||

时间:2018-09-10 17:49:57

标签: php if-statement strpos

我试图让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%的情况下执行该脚本。

希望总结一下。

4 个答案:

答案 0 :(得分: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';
}

答案 1 :(得分:0)

除非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;

答案 2 :(得分:0)

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

您提到,如果true包含$line_20,则想回显5;但是,您的if语句检查相反的条件以回显false,如果条件失败则将回显true。因此,我们需要将条件从if line contains 0 or line contains 5更改为if not (line contains 0 or line contains 5)

完成此操作的方法是考虑De Morgan's laws。具体来说,当您在逻辑或或逻辑与之间分配否定时,以下条件成立:

  • 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

答案 3 :(得分:-1)

改为使用&&

如果该字符为“ 5”或“ 0”,则在该if语句中使用OR运算符将返回true

因此,由于strpos($line_2, '0') === false将返回true,因此您的陈述将变为

if(false || true)

因此回显“等于假”,而使用AND

if(false && true)

将为假,给您“等于真实”