2012-03-05 20 views
-1

我对这段代码感到困惑。 $this->product是一个有12个变量的对象。 var_dump表示$key是一个字符串。为什么条件语句在这个例子中不起作用?

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

尽管“ID”和“重量”存在的VAR名称和表示为内$key字符串他们没有这个条件抓住了。有没有人有任何想法?

+4

你有一个逻辑错误。 '$ key'将*总是*不是'id' **或**不是'weight' – 2012-03-05 16:49:27

回答

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。 [德摩根法律](http://en.wikipedia.org/wiki/De_Morgan%27s_laws)FTW! – ruakh 2012-03-05 16:50:42

+0

非常真实...代表我的合计逻辑错误。 – 2012-03-05 17:07:20

0

如果key ==“id”,那么它不会==“重量”,所以它会一直通过你的if检查。

0

那么它将永远不会到达else语句,因为在任何情况下密钥将不等于“id”或不等于“weight”。

改变你的条件语句$键==“ID” & & $键==“重量”

0

你的条件正赶上那里$key"id"或者没有"weight" - !所以它会赶上一切如$key不能同时存在。

你打算用:

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