2011-02-09 12 views
0

は私が達成しようとしているものです:PHPの論理演算子の比較評価

$ xはこれらの3つの値のいずれかである場合:100、200または300 - 何か

を行い、私は」 mがこれを行う:

if($x==("100"||"200"||"300")) 
{ 
    //do something 
} 

しかし//do something$x400

であっても、実行されます私は、この作品に気づい0

:どのように

if($x=="100"||$x=="200"||$x=="300") 
{ 
    //do something 
} 

は、コードの最初のブロックは、2番目のコードブロックとは異なるのですか?私は間違って何をしていますか?

答えて

3

式の結果ので、あなたのコードが動作していない理由は次のとおりです。式は、少なくとも1つのtruthy値が含まれているため

('100' || '200' || '300') 

は常にTRUEです。

したがって、式のRHSはTRUEですが、LHSは真理値ですから、式全体がTRUEと評価されます。 これが起こっている理由は、==オペレータであり、緩やかな比較が行われているためです。 ===を使用した場合、結果の式は常にFALSEになります。 (。$xの値がfalse-yのあるコースの場合を除き)

のは、これを分析してみましょう:

$x等しい'400'と仮定すると:

($x == ('100'||'200'||'300')) 

//^  ^
// true   true 

今意味をなさない?

ここでボトムラインは:これは、3つの値を共通変数と比較する間違った方法です。

if(in_array($x, array('100', '200', '300')) { 
    //do something... 
} 
+1

なぜこの投稿に否定的な投票がありますか? –

+0

誰が彼を落としたのかわからないけど、彼の最初の反応が何か他のものだったからだと思います。私の以前のコメントは彼の最初の反応に向けられていました。 –

+0

あなたの応答jacobに感謝します - その説明は確かに多くの助けになります! –

0

あなたはそれが完全に働いているアレイ内のすべての値をとることができます。

私の提案は、あなたがin_arrayを使用することです。

$x=400; 

if(in_array($x, array('100', '200', '300'))) { 
    echo $x.'is in array'; 
} else { 
    echo $x.'is not in array'; 
}