以下是我的一些代码:( p只是echos plus添加换行符)
foreach ($vanSteps as $k => $reqInfo)
{
p($k);
if ('van' == $k) { p('The key is the van, continue'); continue; }//continue if we reached the part of the array where van is key
//do stuff
}
我得到了这个输出:
0
The key is the van, continue
1
2
3
van
The key is the van, continue
为什么当键为0时if语句返回true?这个foreach循环处理当key == 0时应用的逻辑(以及任何其他键,除非键是'van')并且这会混淆逻辑,因为当key为0时它返回true。
任何帮助?
谢谢。
答案 0 :(得分:12)
使用===
进行此比较。当PHP比较字符串和整数时,它首先将字符串转换为整数值,然后进行比较。
请参阅手册中的Comparison Operators。
答案 1 :(得分:6)
在PHP中'van' == 0
是true
。这是因为当使用==
比较字符串和数字时,字符串将转换为数字(如下面的第二个链接所述);这使得内部比较成为0 == 0
,当然是true
。
根据您的需求建议的替代方案是使用===
进行严格的相等比较。
答案 2 :(得分:2)
在PHP中,比较2种类型时,必须将它们转换为相同的类型。在您的情况下,您将string
与int
进行比较。
在内部,这将转换为
if((int)'van'==0)....
然后
if((int)'van'==1)....
(int)'任何可能的字符串'将是0
:)所以你要么必须手动将两个值转换为相同的类型,要么使用===
作为比较运算符,而不是松散=
。
此规则的一个例外(如注释中所指出的)将是字符串以数字开头,或者可以以任何方式解释为数字(1,0002,-1等)。在这种情况下,字符串将被解释为数字,指向非数字字符串结尾的结尾
答案 3 :(得分:0)
这很好用:
$array = array(0=>"a",1=>"b","van"=>"booya!");
function p($v){ echo "{$v}<br />"; }
foreach ($array as $k => $reqInfo)
{
p($k);
if ('van' === $k) { p('The key is the van, continue'); continue; }//continue if we reached the part of the array where van is key
//do stuff
}
输出:
0
1
van
The key is the van, continue
请注意===
。
答案 4 :(得分:0)
阅读Comparison with Various Types table 当其中一个操作数为数字时,另一个操作数也将转换为数字。由于'van'是非数字sting,它被转换为0.你应该使用===运算符,这也检查变量类型
答案 5 :(得分:0)
将'van'
解释为布尔值(false
),其中0等于。
要检查PHP中类型和值的完全匹配,您必须使用===
而不是==
答案 6 :(得分:0)
那是因为'van' == 0
(真实)。
相反,您应该使用'van' === 0
(false)。
简而言之,使用===而不是==。