核心区别在于是否同时校验值和类型:松散模式仅比较转换后的值,严格模式要求值与类型均相同;前者易致误判,后者适用于id、订单号等精确匹配场景。

区别核心在于:是否同时校验值和类型。松散模式只看“值相等”,严格模式要求“值和类型都相同”。
松散模式(默认,$strict = false)
PHP 会自动做类型转换,再比较。比如:
-
in_array(0, [''])→ true(整数 0 被转为字符串后与空字符串相等) -
in_array(1, ['1', 'apple'])→ true(数字 1 和字符串 '1' 经转换后匹配) -
in_array('0123', ['123'])→ true(前导零被忽略,字符串转成数字 123 后匹配)
这种行为容易引发误判,尤其在处理 ID、编码、带格式的字符串时风险很高。
严格模式($strict = true)
使用全等比较(===),不转换类型,必须完全一致:
-
in_array(1, ['1', 'apple'], true)→ false(int 1 ≠ string '1') -
in_array('0123', ['123'], true)→ false(字符串内容不同,前导零不被忽略) -
in_array(0, [0, 1, 2], true)→ true(类型和值都匹配)
适合需要精确匹配的场景,比如验证用户输入的权限码、订单号、配置项键名等。
什么时候该用严格模式
只要数组里混有不同数据类型,或你关心字符串的原始格式(如带前导零、大小写、空格),就该启用严格模式。
- 数组元素是字符串,而你要查的是整数(或反之)
- 字符串含前导零、尾随空格、大小写敏感内容
- PHP 版本升级后行为不一致(如 PHP 7.4 和 8.1 对
in_array(0, ['a','b'])返回不同结果)
养成习惯:除非明确需要松散比较,否则第三个参数一律写 true。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











