在foreach循环中PHP平等似乎显然是错误的

时间:2013-09-10 11:57:09

标签: php

对于此代码:

<?php

$data = array('0' => 'A_VALUE');

foreach ($data as $key => $value) {
  if ($key == "Something to match the key on") {
    print_r($key);
    print_r('key matches');
  }
}

我得到了这个输出

  

0键匹配

此处的在线示例:http://3v4l.org/dKOWq#v431

我不能为我的生活弄清楚我为什么要这样做。比较应该明确地返回FALSE。

有人可以向我解释一下吗?

5 个答案:

答案 0 :(得分:7)

  

有人可以向我解释一下吗?

Type juggling

由于您使用的是==,因此PHP会将0(int)与Something to match the key on(字符串)进行比较。双方都被投射到int。因此Something to match the key on成为00 == 0true

使用strict equality或明确投射。

例如:

if ((string)$key == (string)"Something to match the key on") {
  // code
}

答案 1 :(得分:1)

使用===检查类型和值的相等性,以避免混淆

答案 2 :(得分:1)

如有疑问,请查看type comparison表。本页介绍了PHP如何计算每种可能的比较类型。

答案 3 :(得分:0)

“===”用于检查“数据类型”

使用此代码进行比较

<?php

$data = array('0' => 'A_VALUE');

foreach ($data as $key => $value) {
  if ($key === "Something to match the key on") {
    print_r($key);
    print_r('key matches');
  }
} 

答案 4 :(得分:0)

始终尝试使用===进行相等,这总能为您提供正确的结果。