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
包含 0
或 5
,您提到要回显 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
.
我试图让 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
包含 0
或 5
,您提到要回显 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
.