我的代码中有以下内容:
$mixed = array();
$mixed[0] = "It's a zero!";
$mixed['word'] = "It's a word!";
foreach ($mixed as $key => $value) {
if ($key == 'word') {
echo $value.'<br />';
}
}
由于某种原因,上面的代码会同时打印“It's a zero!”和“这是一个词!”。我期待它只打印“这是一个词!”。这是为什么??我觉得我错过了一些重要的东西。当我在 if 语句中使用 ===
时,它按预期工作,换句话说,它只打印“It's a word!”。我知道相等运算符和相同运算符之间存在差异,但第一个示例不相等,是吗?
最佳答案
==
在比较之前为您进行类型转换。
当你做了 ==
用一个整数 0
, 它转换了 'word'
转化为适当的整数值。
intval()
在提供纯字符串时返回 0,因此 0 匹配。另一个在字符串上下文中匹配,那个也匹配。
===
没有这样的隐式转换,因此它仅在一种情况下返回 true,即字符串实际上相同。
关于PHP - 使用 ==(相等)和 ===(相同)的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13365878/