array_search 找不到时返回 false,而非 0 或 null;必须用 $key !== false 判断,因 0 == false 成立会导致索引 0 被误判为未找到。

array_search 返回 false 还是 0?别用 if($key) 判断
很多代码里写 if (array_search($val, $arr)),结果值在索引 0 位置时被当成“没找到”。因为 0 == false 成立,松散比较直接跳过逻辑分支。
- 必须用
$key !== false判断是否真没找到 - 如果数组键可能是字符串(比如关联数组),
0和'0'类型不同,但array_search返回的键类型和原数组一致,别想当然 cast -
$strict = true能避免类型隐式转换导致的误匹配,比如搜索字符串'1'时不命中整数1
in_array 的松散比较会让 '1' 匹配 1、true、甚至空数组
in_array 默认用 == 比较,不是 ===。这意味着它会把几乎所有东西都往布尔或数字上转,尤其在处理表单输入、API 响应这类混合类型数据时极危险。
- 传入第三个参数
true:in_array('1', [1, 2, 3], true)→false - 遇到
[false, 0, null, '']这类数组,哪怕搜'hello'都可能返回true(因为'hello'转布尔为true,而true == false在松散规则下成立) - 永远不要依赖默认行为做安全判断,比如权限检查、状态校验
函数没写 return,你以为返回数组,其实返回 NULL
PHP 函数不写 return 就返回 null,不是空数组,也不是上一行变量的值。这个 null 后续进 foreach 或 count() 就直接报错。
- 检查返回值最简单方式:
var_dump($result),别靠 echo 或直觉 - 如果函数本该返回数组,开头加一句
return [];作兜底,比让调用方处处判空更稳妥 - 启用
declare(strict_types=1);并声明返回类型function get_data(): array,能让类型错误在运行时报出,而不是静默崩在下游
array_search 找不到就返回 false,但 false 不等于 null 或 0
这是最容易混淆的一点:false 是独立布尔值,和 null、0、''、[] 都不等价。但很多人用 empty() 或 !$key 判断,结果把合法的 0 键、'' 键全当失败处理。
-
empty($key)对0、false、null、''全返回true,完全不能用于array_search结果判断 - 只要涉及键可能为
0或空字符串,就必须用!== false - 多维数组要搜索?
array_search不支持,得自己写递归或用array_walk_recursive+ 闭包捕获
var_dump 花不了两秒,但能省掉半小时排查 Invalid argument supplied for foreach()。php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











