为什么条件语句在这个例子中不起作用?

时间:2012-03-05 16:46:25

标签: php

我对这段代码感到有点困惑。 $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中表示为字符串,但它们不会被此条件限制。有没有人有任何想法?

5 个答案:

答案 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