2012-03-05 19 views
-1

私はこのコードに少し困惑しています。 $this->productは12のvarsを持つオブジェクトです。 var_dumpは、$keyが文字列であることを示します。 「ID」と「重量」VAR名として存在していると、彼らはこの条件でキャッチされていない$key内の文字列として表現さにもかかわらずこの例で条件文が機能しないのはなぜですか?

foreach ($this->product as $key => $val) { 
    if (($key !== "id") || ($key !== "weight")) { 
     var_dump($key); 
    } else { 
     print_r("Success" . $key); 
    } 
} 

。誰にもアイデアはありますか?

+4

あなたは論理エラーがあります。 '$ key'は常に' id' **または** weightではなく** –

答えて

4

私はあなたがする意図だと思う:

foreach ($this->product as $key => $val) { 
    if (($key !== "id") && ($key !== "weight")) { 
     var_dump($key); 
    } else { 
     print_r("Success" . $key); 
    } 
} 

(($key !== "id") || ($key !== "weight"))$keyが同時に「ID」と「重量」することはできません、常に真です。

+1

+1です。 [De Morganの法律](http://en.wikipedia.org/wiki/De_Morgan%27s_laws)FTW! – ruakh

+0

非常に真実...私のために合計論理エラー。 –

0

key == "id"なら、== "weight"ではないので、常にあなたのチェックをパスします。

0

いずれにしても、キーが "id"と等しくないか、または "weight"と等しくないため、elseステートメントには決して行きません。

$キーにあなたの条件文を変更

==「ID」& & $キー==「重み」

0

$key"id"されていないか、それは"weight"ないところあなたの条件がキャッチされる! - それがキャッチします$keyというものは両方にすることはできません。

あなたが使用することを意味:

if (($key !== "id") && ($key !== "weight")) { 
    var_dump($key); 
} else { 
    // $key is "id" or "weight" 
    print_r("Success" . $key); 
} 
0

の代わりに、文字列をしたいことがあり$key !== 'id'やってこのstrcmp($key, 'id') != 0のように比較します。 strcmp関数は、文字列が一致すると0を返します。ここにあるドキュメントを参照してくださいhttp://php.net/manual/en/function.strcmp.php

関連する問題