PHP中数组元素类型一致时,能否省略in_array()的strict参数?
关于PHP in_array()中strict参数的使用判断
你的判断是对的,在当前代码场景下完全不需要指定strict = true。
原因很直接:
- in_array()默认采用松散比较(
==),当数组内所有元素和要查找的参数都是字符串类型时,松散比较和严格比较(===)的结果完全一致——字符串的松散比较会先确认类型匹配,再对比内容,不会出现误判。 - 你已经明确
$basket里只有字符串,查找的'raspberry'也是字符串,这种情况下松散比较足够精准,开严格模式不会带来任何额外收益。
什么时候必须用strict = true?
只有当以下两种情况出现时,严格模式才是必要的:
- 数组中混合了不同类型的元素,比如同时存在字符串
'123'和整数123,松散比较会认为两者相等,如果你需要精确区分类型和值,就必须开启严格模式。 - 无法确保查找值或数组元素的类型始终一致,比如用户输入的内容可能是字符串或数字,这时候严格模式能避免意外的匹配结果。
举个直观的反例:
<?php $mixedArray = ['123', 123, 'orange']; // 松散比较返回true,因为'123' == 123 var_dump(in_array(123, $mixedArray)); // 严格比较返回false,因为123(整数)和'123'(字符串)类型不同 var_dump(in_array(123, $mixedArray, true));
额外建议
虽然当前场景不需要,但如果后续代码可能修改(比如数组可能加入非字符串元素),提前加上strict=true能让代码更健壮,避免未来出现隐性bug。
内容的提问来源于stack exchange,提问作者Undiscouraged
相关产品推荐
相关产品推荐

