我试图了解in_array下一个场景中的行为:
$arr = array(2 => 'Bye', 52, 77, 3 => 'Hey');
var_dump(in_array(0, $arr));
Run Code Online (Sandbox Code Playgroud)
返回的值in_array()是boolean true.正如你所看到的那样,没有值相等0,所以如果有人可以帮助我理解为什么函数返回true?
Sam*_*son 56
根据文档中的注释,这是一个已知问题.请考虑以下示例:
in_array(0, array(42)); // FALSE
in_array(0, array('42')); // FALSE
in_array(0, array('Foo')); // TRUE
Run Code Online (Sandbox Code Playgroud)
为避免这种情况,请提供第三个参数,true将比较置于严格模式,这不仅会比较值,还会比较类型:
var_dump(in_array(0, $arr, true));
Run Code Online (Sandbox Code Playgroud)
存在其他解决方法,不需要将每个检查置于严格模式:
in_array($value, $my_array, empty($value) && $value !== '0');
Run Code Online (Sandbox Code Playgroud)
所有这些背后的原因可能是字符串到数字的转换.如果我们试图从"再见"中获取一个数字,我们会得到0,这是我们要求查询的值.
echo intval("Bye"); // 0
Run Code Online (Sandbox Code Playgroud)
为了确认这一点,我们可以array_search用来找到与匹配值相关联的键:
$arr = array(2 => 'Bye', 52, 77, 3 => 'Hey');
echo array_search(0, $arr);
Run Code Online (Sandbox Code Playgroud)
在这里,返回的键是2,意味着0在转换为Bye整数时找到.
| 归档时间: |
|
| 查看次数: |
14017 次 |
| 最近记录: |