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');
  }
}

我得到这个输出

0键匹配

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

我一生都无法弄清楚我为什么会得到这个。比较应该清楚地返回 FALSE。

谁可以给我解释一下这个?

4

5 回答 5

7

谁可以给我解释一下这个?

类型杂耍

由于您使用的是==,PHP 将0(int) 与Something to match the key on(string) 进行比较。双方都被强制转换为int. 所以Something to match the key on成为0。并且0 == 0true

使用严格相等或显式转换。

例如:

if ((string)$key == (string)"Something to match the key on") {
  // code
}
于 2013-09-10T11:58:15.720 回答
1

使用 === 检查类型与值是否相等,以避免混淆

于 2013-09-10T12:00:36.043 回答
1

如有疑问,请查看类型比较表。本页解释 PHP 如何计算每种可能的比较类型。

于 2013-09-10T12:02:55.957 回答
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');
  }
} 
于 2013-09-10T12:04:49.437 回答
0

总是尝试使用 === 来表示相等,这总是会给你正确的结果。

于 2013-09-10T12:12:59.503 回答