我对这段代码感到有点困惑。 $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”和“weight”作为var名称出现并在$key
中表示为字符串,但它们不会被此条件限制。有没有人有任何想法?
答案 0 :(得分: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”和“weight”。
答案 1 :(得分:0)
如果key
==“id”,那么它不会==“重量”,所以它会一直通过你的if检查。
答案 2 :(得分:0)
好吧它永远不会进入else语句,因为在任何情况下,键都不等于“id”或不等于“weight”。
将条件语句更改为$ key!==“id”&& $ key!==“weight”
答案 3 :(得分:0)
您的条件是在$key
不是"id"
或"weight"
不是$key
的情况下捕捉 - 所以它会抓住所有内容,因为if (($key !== "id") && ($key !== "weight")) {
var_dump($key);
} else {
// $key is "id" or "weight"
print_r("Success" . $key);
}
不能同时发生。
你的意思是:
{{1}}
答案 4 :(得分:0)
您可能希望像$key !== 'id'
这样进行字符串比较,而不是strcmp($key, 'id') != 0
。当字符串匹配时,strcmp
函数返回0
。请参阅此处的文档http://php.net/manual/en/function.strcmp.php