$arrValue = array('first', 'second');
$ret = in_array(0, $arrValue);
var_dump($ret);
var_dump($arrValue);
以上示例给出了以下结果:
bool(true)
array(2) {
[0]=> string(5) "first"
[1]=> string(6) "second"
}
为什么in_array()
将针0与任何给定的草垛相匹配?
答案 0 :(得分:18)
那是因为该函数使用了非严格的比较。数组中的字符串与整数0进行比较。一些类型转换正在发生数据丢失,两者都被认为是相同的:
var_dump(0 == 'first'); // bool(true)
因此,解决此问题,您可以使用第三个参数并将其设置为true以请求严格比较。
$ret = in_array(0, $arrValue, true);
请记住,严格是非常严格的。在严格的比较中,0
不等于"0"
。
答案 1 :(得分:0)
基本上这里0视为false,因此搜索将像函数 in_array 一样在您的数组值之间搜索false。使它(0)字符串以获得不同的输出。 由于php支持严格或非严格的比较,所以你需要传递第三个值 true ,它告诉它是严格的,因为默认情况下它是非严格的。