我正在尝试根据排名的变化显示图像。如果在我的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语句在所有值上都是真的。
非常感谢任何帮助!
答案 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。