我不知道为什么这不起作用,在数据库字段中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 )
那么一切都像预期的那样工作。
它工作正常,但你解释错了。您的值为 8。所以你的表达实际上是:
if (8 !== 1 || 8 !== 8) {
// ...
}
你的第一个表达式是 true
,因为 8 不等于 1,所以你得到: You cannot do that!
如预期的那样。
您需要一个 AND 表达式 ( &&
),因为您希望在值不是 1 而不是 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
你可以用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
不匹配,则抛出该错误
您直接从数据库中获取此内容(我猜),因此$o['statuss']
很可能string(8)
蚂蚁而不是int(8)
.
当你使用!==
/===
时,它是严格的比较,这意味着类型必须相同(8 === '8'
是假的 - 8 == '8'
不是)。改用!=
/==
来避免这种情况。
或者,将其转换为 int: $o['statuss'] = (int)$o['statuss'];
也就是说,if ( $o['statuss'] !== 1 || $o['statuss'] !== 8 )
永远是正确的,好像它是 8,那么它就不会是 1,如果它是 1,那么它就不会是 8。如果两者都不是,那也是真的。您是否正在寻找&&
运算符(意思是 AND)?
8 ) 第一部分的计算结果为 true ($o['statuss'] !== 1 = true)。因此,您会收到此消息。
通过扭转局面来解决它:
if ( $o['statuss'] == 1 || $o['statuss'] == 8 )
{
// do your thing
}
else
{
// You cannot do this
}