PHP函数in_array(...)有什么问题?

时间:2016-07-28 09:34:02

标签: php arrays php-7

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?

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

真的是设计吗?或者它是一个错误,应该报告?

1 个答案:

答案 0 :(得分:13)

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

  

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

loose comparison rules下,有效'a'等于0以来(int)'a' == 0