php, in_array, 0 值
我试图在下一个场景中理解行为:in_array
$arr = array(2 => 'Bye', 52, 77, 3 => 'Hey');
var_dump(in_array(0, $arr));
的返回值为 布尔值 。如您所见,没有等于 的值,所以如果有人能帮助我理解为什么函数返回 true?in_array()
true
0
我试图在下一个场景中理解行为:in_array
$arr = array(2 => 'Bye', 52, 77, 3 => 'Hey');
var_dump(in_array(0, $arr));
的返回值为 布尔值 。如您所见,没有等于 的值,所以如果有人能帮助我理解为什么函数返回 true?in_array()
true
0
根据文档中的注释,这是一个已知问题。请考虑以下示例:
in_array(0, array(42)); // FALSE
in_array(0, array('42')); // FALSE
in_array(0, array('Foo')); // TRUE
为避免这种情况,请提供第三个参数 ,将比较置于严格模式,该模式不仅会比较值,还会比较类型:true
var_dump(in_array(0, $arr, true));
存在其他解决方法,这些解决方法不需要将每个检查都置于严格模式:
in_array($value, $my_array, empty($value) && $value !== '0');
所有这些背后的原因可能是字符串到数字的转换。如果我们试图从“再见”中获取一个数字,我们会得到 ,这是我们要求查找的值。0
echo intval("Bye"); // 0
为了确认这一点,我们可以使用来查找与匹配值关联的键:array_search
$arr = array(2 => 'Bye', 52, 77, 3 => 'Hey');
echo array_search(0, $arr);
在这里,返回的键是 ,在转换为整数时可以找到意义。2
0
Bye
尝试向呼叫添加第三个参数(严格模式)。true
in_array