php逻辑运算符比较评估

时间:2011-02-09 06:02:14

标签: php

这是我想要实现的目标:

  

如果$ 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  
} 

第一个代码块与第二个代码块有何不同?我做错了什么?

2 个答案:

答案 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';
}