array(..)中的PHP函数出了什么问题


What is wrong with the PHP function in_array(...)?

PHP函数in_array(...)"检查数组中是否存在值"。

但是我在处理字符串(PHP v7.0.3)时观察到了一个非常奇怪的行为。此代码

$needle = 'a';
$haystacks = [['a'], ['b'], [123], [0]];
foreach ($haystacks as $haystack) {
    $needleIsInHaystack = in_array($needle, $haystack);
    var_dump($needleIsInHaystack);
}

生成以下输出:

bool(true)
bool(false)
bool(false)
bool(true) <- WHAT?

如果$haystack包含值为0的元素,则函数为每个string $needle返回true

它真的是故意的吗?还是它是一个错误,应该报告?

如果不将in_array的第三个参数设置为true,则使用类型强制进行比较。

如果第三个参数strict设置为TRUE,那么in_array()函数也会检查干草堆中针的类型。

在宽松的比较规则下,实际上'a'等于0,因为(int)'a' == 0