意外的in_array()行为

时间:2013-10-09 14:59:21

标签: php arrays

假设我有以下数组:

$enabled = array(
  'page' => 'page',
  'article' => 0,
);

注意“文章”是一个关键,但不是一个值。由于in_array()搜索匹配值,我希望以下行返回FALSE:

in_array('article', $enabled)

然而,它返回TRUE。为什么?我错过了什么?

2 个答案:

答案 0 :(得分:7)

默认情况下,函数in_array()执行松散比较,这会导致PHP将表达式(0 == "article")计算为TRUE

你需要使用in_array()的strict参数来检查大海捞针的类型:

var_dump( in_array('article', $enabled, true) );

Demo!

答案 1 :(得分:0)

传递第三个参数进行严格类型检查:

in_array('article', $enabled, true);

否则,PHP将尝试比较0(整数)和'article'(字符串) →'article'评估为0!
→他们是平等的!

Example @ codepad.org