我从in_array函数中获取了奇怪的输出

时间:2014-07-22 13:54:29

标签: php arrays

在php中,以下代码返回true

$array = array(
  'isReady' => false,
  'isPHP' => true,
  'isStrange' => true
);
var_dump(in_array('sitepoint.com', $array));

结果是true为什么?

2 个答案:

答案 0 :(得分:4)

由于in_array的第3个参数,$strict

bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] )

默认情况下为FALSE,这使其使用==

'sitepoint.com' == true

这实际上是正确的(因为PHP的类型杂耍)!

你想这样做:

in_array('sitepoint.com', $array, TRUE);

这将使其===

'sitepoint.com' === true

那不是真的。

答案 1 :(得分:3)

in_array执行松散比较(仅限值检查,而不是类型和值)。由于您的数组值都是布尔值(truefalse),因此搜索字符串(“sitepoint.com”)被强制转换为布尔值,实际上,您的代码转换为到:

var_dump(in_array((bool)'sitepoint.com', array(true, false, true)));

由于字符串在投放到bool时为truein_array会返回true
要强制进行类型和值检查,请将true作为第三个参数传递给in_array

cf the docs