Php 最后一条if语句的计算结果是否始终为true(覆盖)?

Php 最后一条if语句的计算结果是否始终为true(覆盖)?,php,Php,我试图显示一个基于等级变化的图像。如果数组$rank\u change的值在我的If语句之前被回显,则会打印正确的值,例如: 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\"/>"; }

我试图显示一个基于等级变化的图像。如果数组
$rank\u change
的值在我的If语句之前被回显,则会打印正确的值,例如:

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\"/>";}
if($rank\u change[$i]>0){$rank\u change[$i]='';}
如果($rank_change[$i]<0){$rank_change[$i]='';}
如果($rank_change[$i]==0){$rank_change[$i]='';}
$rank\u change
的值为7和1的情况下,为什么最后一条语句的计算结果仍然为true

我意识到使用
switch($rank\u change[$I])
会更有效,但我仍然不明白为什么最后的if语句对所有值都求值为true


任何帮助都将不胜感激

对于最后两个条件,使用else if而不是简单if

实际上,您正在覆盖每个测试后表达式中的
$rank\u change[$i]
中的值
$rank\u change[$i]=“
将更改
$rank\u change[$i]
的值,这将使以下测试之一也返回true,从而导致
$rank\u change[$i]
的值发生另一次更改


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

对于最后两个条件,使用else if而不是简单的if

实际上,您正在覆盖每个测试后表达式中的
$rank\u change[$i]
中的值
$rank\u change[$i]=“
将更改
$rank\u change[$i]
的值,这将使以下测试之一也返回true,从而导致
$rank\u change[$i]
的值发生另一次更改


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

Adrien是正确的,您应该使用if-else语句。最后一个条件是求值为true,因为php正在对您的值执行某种类型强制

有关何时/如何执行此操作的更多信息,请参见(特别是类型比较表)


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

Adrien是正确的,您应该使用if-else语句。最后一个条件是求值为true,因为php正在对您的值执行某种类型强制

有关何时/如何执行此操作的更多信息,请参见(特别是类型比较表)


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

可能是因为比较
“any string”==0
在PHP中的计算结果是
true
?我会尝试一下,但我仍然不明白为什么最后一个总是会被触发,因为
如果满足条件,则
语句仅用于计算
true
,否则就被忽略了,不是吗?啊,很好的解释!我没有想到这一点。完成,当然,工作:)。计时器一停,我就接受你的回答
“any string”==0
在php中计算为
true
:比较字符串和整数时,php将首先尝试将字符串转换为整数。但是
“any string”
不表示任何整数值,因此php假定其为0。(我讨厌这种讨厌的字符串到整数转换的语言)。这就是解释。因为,据推测,在PHP中,比较
“any string”==0
的计算结果为
true
?我会尝试一下,但我仍然不明白为什么最后一个总是会被绊倒,因为
如果
语句只有在满足条件的情况下才要计算
true
,否则就会被忽略-不是这样吗?啊,很好的解释!我没有想到这一点。完成,当然,工作:)。计时器一停,我就接受你的回答
“any string”==0
在php中计算为
true
:比较字符串和整数时,php将首先尝试将字符串转换为整数。但是
“any string”
不表示任何整数值,因此php假定其为0。(我讨厌这种讨厌的字符串到整数转换的语言)。这就是解释。