为什么PHP中in_array('test', [0,1])会返回1?
问题原因
这是PHP弱类型机制导致的典型逻辑问题,根源是in_array的默认比较规则。
你写出的代码如下:
<?php echo in_array('test', [0,1]); ?>
代码输出1的逻辑很直接:
in_array的函数签名为in_array(mixed $needle, array $haystack, bool $strict = false): bool,第三个控制比较模式的参数默认是false,也就是执行松散比较,不对数据类型做强制校验。- 松散比较过程中,PHP会自动做类型转换:当把字符串
'test'和数组内的整型0做等值判断时,非数字开头的字符串会被强制转换为整型0,此时'test' == 0的结果为true。 - 函数匹配到了符合条件的元素,就返回布尔值
true,对应输出就是1。
解决办法
- 调用
in_array时把第三个参数设为true,开启严格比较模式,此时函数会同时比对值和数据类型,修正后的代码写法:
这种模式下字符串echo in_array('test', [0,1], true);'test'和数组里的整型元素类型不匹配,会正确返回false,不会出现预期外的匹配结果。 - 处理包含混合类型元素的数组查找场景时,尽量固定开启严格比较,避免弱类型自动转换带来的隐性逻辑漏洞。
内容的提问来源于stack exchange,提问作者Sabzaliev Shukur
相关产品推荐
相关产品推荐

