我不知道为什么这不起作用,在数据库字段statuss
中,是8
。我从下面的代码中获取输出You cannot do that!
:
if ( $o['statuss'] !== 1 || $o['statuss'] !== 8 ) {
$ret['result_msg'] = 'You cannot do that!';
die(json_encode($ret));
}
我已经尝试过,但无济于事:
if ( ($o['statuss'] !== 1) || ($o['statuss'] !== 8) )
如果我只留下if ( $o['statuss'] !== 8 )
,那么所有工作都会像预期一样。
答案 0 :(得分:3)
我认为它工作正常,但你解释错了。您的值 8 。所以你的表达实际上是:
if (8 !== 1 || 8 !== 8) {
// ...
}
您的第一个表达式是true
,因为8 不等于为1,所以您得到You cannot do that!
正如预期的那样。
您需要 AND 表达式(&&
),因为您希望在值不是1 AND 而不是8时显示错误消息。
看来你并不是很清楚这里发生了什么,所以让我进一步解释一下。
让我们分别考虑1到8之间的所有数字$o['statuss'] !== 1
和$o['statuss'] !== 8
。
1 !== 1
=> false
,1 !== 8
=> true
:因为1 !== 8
您会看到该消息。2 !== 1
=> true
,2 !== 8
=> true
:因为2 !== 1
您会看到该消息。3 !== 1
=> true
,3 !== 8
=> true
:因为3 !== 1
您会看到该消息。4 !== 1
=> true
,4 !== 8
=> true
:因为4 !== 1
您会看到该消息。5 !== 1
=> true
,5 !== 8
=> true
:因为5 !== 1
您会看到该消息。6 !== 1
=> true
,6 !== 8
=> true
:因为6 !== 1
您会看到该消息。7 !== 1
=> true
,7 !== 8
=> true
:因为7 !== 1
您会看到该消息。8 !== 1
=> true
,8 !== 8
=> false
:因为8 !== 1
您会看到该消息。你知道,你从不实际进入else
分支(或者至少跳过if
分支)。
现在,如果您使用 AND 运算符,我们也会这样做:
1 !== 1
=> false
,1 !== 8
=> true
:您不会看到该消息,因为并非所有条件都是true
2 !== 1
=> true
,2 !== 8
=> true
:您会看到该消息,因为它们都是true
。3 !== 1
=> true
,3 !== 8
=> true
:您会看到该消息,因为它们都是true
。4 !== 1
=> true
,4 !== 8
=> true
:您会看到该消息,因为它们都是true
。5 !== 1
=> true
,5 !== 8
=> true
:您会看到该消息,因为它们都是true
。6 !== 1
=> true
,6 !== 8
=> true
:您会看到该消息,因为它们都是true
。7 !== 1
=> true
,7 !== 8
=> true
:您会看到该消息,因为它们都是true
。8 !== 1
=> true
,8 !== 8
=> false
:您不会看到该消息,因为并非所有条件都是true
答案 1 :(得分:1)
您可以使用in_array
if ( !in_array($o['statuss'], array(1,8)) )
{
$ret['result_msg'] = 'You cannot do that!';
die(json_encode($ret));
}
使用in_array
说,如果$o['statuss']
与1
或8
不匹配,则会抛出该错误
答案 2 :(得分:0)
您直接从数据库中获取此信息(我在猜测),因此$o['statuss']
最有可能是string(8)
而不是int(8)
。
当您使用!==
/ ===
时,strict comparison表示类型HAS相同(8 === '8'
为false - 8 == '8'
为不)。请改用!=
/ ==
来避免这种情况。
或者,将其转换为int:$o['statuss'] = (int)$o['statuss'];
那就是说,if ( $o['statuss'] !== 1 || $o['statuss'] !== 8 )
总是是真的,好像它是8,那么它就不会是1,如果它是1然后它就不会是8.如果它们都不是,那么它也是真的。您在寻找&&
运营商(意味着AND)吗?
答案 3 :(得分:0)
在这句话中:if($ o ['statuss']!== 1 || $ o ['statuss']!== 8)第一部分评估为真($ o ['statuss']!= = 1 =真)。因此,您收到此消息。
通过转动物体来解决它:
if ( $o['statuss'] == 1 || $o['statuss'] == 8 )
{
// do your thing
}
else
{
// You cannot do this
}