最后一个if语句总是求值为true(覆盖)


Last if statement always evaluating to true (overwriting)?

我正试图显示一个基于等级变化的图像。如果在我的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。