我正试图显示一个基于等级变化的图像。如果在我的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的情况下,为什么最后一个语句的值仍然为true?
我意识到使用switch($rank_change[$i])
会更有效,但我仍然不明白为什么最后的if语句在所有值上都为true。
如有任何帮助,我们将不胜感激!
在最后两个条件中使用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
构造,并且只有一个测试会成功。
Adrien是正确的,您应该使用if-else语句。最后一个条件是评估为true,因为php正在对您的值进行某种类型强制。
请参阅http://php.net/manual/en/language.operators.comparison.php(特别是类型比较表(,以获取有关它何时/如何做到这一点的更多信息。
基本上,它将'derp' == 0
更改为(int)'derp' == 0
。CCD_ 12为0。