array_keys() 的第三个参数 $strict 控制是否启用严格匹配,默认 false(== 比较,自动类型转换),设为 true 则使用 === 严格比较;混用类型、区分 falsy 值或处理外部数据时应显式传 true。

非严格匹配(默认行为)
当 `$strict = false`(或省略该参数)时,PHP 使用 `==` 比较,会自动进行类型转换。
例如:
$arr = ['a' => 0, 'b' => '0', 'c' => false];-
array_keys($arr, '0')→ 返回['a', 'b', 'c'],因为0 == '0'、0 == false都为真
严格匹配(推荐显式开启)
当 `$strict = true` 时,只返回**类型和值完全相同**的键名,即用 `===` 判断。
同样例子:
-
array_keys($arr, '0', true)→ 只返回['b'],因为只有'b' => '0'是字符串对字符串的完全匹配 -
array_keys($arr, 0, true)→ 返回['a'](整数 0),不包含'b'或'c'
什么时候必须用严格模式
以下情况建议始终传入 true:
- 数组中混用数字和字符串值(如状态码
0和字符串'pending') - 需要区分
0、false、''、null等“falsy”值 - 处理用户输入或外部数据,类型不确定时
常见误用提醒
不要依赖默认行为做精确查找——非严格模式容易漏匹配或错匹配。
写法上建议始终显式写出第三个参数,增强可读性和可维护性:
- ✅ 推荐:
array_keys($data, $target, true) - ❌ 避免:
array_keys($data, $target)(除非你明确接受类型转换)











