php, in_array, 0 值

2022-08-30 15:31:01

我试图在下一个场景中理解行为:in_array

$arr = array(2 => 'Bye', 52, 77, 3 => 'Hey');
var_dump(in_array(0, $arr));

的返回值为 布尔值 。如您所见,没有等于 的值,所以如果有人能帮助我理解为什么函数返回 true?in_array()true0


答案 1

根据文档中的注释,这是一个已知问题。请考虑以下示例:

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);

在这里,返回的键是 ,在转换为整数时可以找到意义。20Bye


答案 2

尝试向呼叫添加第三个参数(严格模式)。truein_array