这是我想要实现的目标:
如果$ x是这3个值中的任何一个:100,200或300 - 做点什么
我这样做:
if($x==("100"||"200"||"300"))
{
//do something
}
但即使//do something
为$x
400
我注意到这有效:
if($x=="100"||$x=="200"||$x=="300")
{
//do something
}
第一个代码块与第二个代码块有何不同?我做错了什么?
答案 0 :(得分:3)
您的代码无效的原因是因为表达式的结果:
('100' || '200' || '300')
总是TRUE
因为表达式至少包含一个真值。
因此,表达式的RHS是TRUE
,而LHS是一个真值,因此整个表达式的计算结果为TRUE
。 发生这种情况的原因是因为==
运算符,它进行了松散的比较。如果您使用===
,则生成的表达式始终为FALSE
。 (当然,除非$x
的值为false-y。)
让我们分析一下:
假设$x
等于'400'
:
($x == ('100'||'200'||'300'))
// ^ ^
// true true
现在有意义吗?
这里的底线是:这是将3个值与公共变量进行比较的错误方法。
我的建议是你使用in_array
:
if(in_array($x, array('100', '200', '300')) {
//do something...
}
答案 1 :(得分:0)
你可以将数组中的所有值都完美地运用。
$x=400;
if(in_array($x, array('100', '200', '300'))) {
echo $x.'is in array';
} else {
echo $x.'is not in array';
}