最后if语句总是评估为true(覆盖)?

时间:2011-09-24 13:40:06

标签: php

我正在尝试根据排名的变化显示图像。如果在我的if语句之前回显数组$rank_change的值,则会打印正确的值,例如:

0, 0, 0, 0, 0, 0, 0, -7, 1, 1, 1, 1, 1, 1, 1 

但是,如果在以下if语句后打印,则始终显示side.gif

if($rank_change[$i] > 0) { $rank_change[$i] = "<img src=\"up.gif\" width=\"16\" height=\"16\"/>"; }
if($rank_change[$i] < 0) { $rank_change[$i] = "<img src=\"down.gif\" width=\"16\" height=\"16\"/>"; }
if($rank_change[$i] == 0) { $rank_change[$i] = "<img src=\"side.gif\" width=\"16\" height=\"16\"/>";}

$rank_change的值为7和1的情况下,为什么最后一个语句仍然评估为真?

我意识到使用switch($rank_change[$i])会更有效但是,我仍然不明白为什么最终的if语句在所有值上都是真的。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:3)

在最后两个条件中使用else-if代替简单if。

您实际上是在每次测试后覆盖表达式$rank_change[$i]中的值。 $rank_change[$i] = "<img src=\"up.gif\" width=\"16\" height=\"16\"/>"将更改$rank_change[$i]的值,这将使以下测试之一返回true,从而导致$rank_change[$i]的值的另一次更改...

使用else if构造,只有一个测试会成功。

答案 1 :(得分:0)

Adrien是正确的,你应该使用if-else语句。最后一个条件是评估为true,因为php正在对你的值做一些类型强制。

有关何时/如何执行此操作的详细信息,请参阅http://php.net/manual/en/language.operators.comparison.php(特别是类型比较表)。

基本上,它正在将'derp' == 0更改为(int)'derp' == 0(int)'derp'为0。