在php中,以下代码返回true
$array = array(
'isReady' => false,
'isPHP' => true,
'isStrange' => true
);
var_dump(in_array('sitepoint.com', $array));
结果是true
为什么?
答案 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
执行松散比较(仅限值检查,而不是类型和值)。由于您的数组值都是布尔值(true
和false
),因此搜索字符串(“sitepoint.com”)被强制转换为布尔值,实际上,您的代码转换为到:
var_dump(in_array((bool)'sitepoint.com', array(true, false, true)));
由于字符串在投放到bool
时为true
,in_array
会返回true
。
要强制进行类型和值检查,请将true
作为第三个参数传递给in_array
。