我试图让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%的情况下执行该脚本。
希望总结一下。
答案 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_2
或0
,则想回显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)
将为假,给您“等于真实”