php数组函数返回值存在三大陷阱:一是部分函数失败时返回false而非空数组,如array_search();二是修改原数组却返回非数组值,如array_push()返回长度;三是空/非法输入触发隐式转换或警告。

PHP 数组函数的返回值行为看似简单,实则暗藏不少反直觉的设计,稍不注意就会引发 Notice、逻辑错误甚至静默失败。核心问题在于:部分函数在失败时返回 false,而非空数组;部分函数对空输入或非法参数返回特殊值;还有些函数修改原数组却仍返回结果(如 array_push)。下面分几类典型坑点说明。
返回 false 而非空数组的函数
这是最常踩的坑。很多开发者默认“没找到就返回空”,但实际是 false,直接用于 foreach 或数组函数会报错。
-
array_search():未找到时返回false,不是null或0;若搜索值为0或false,需用=== false严格判断 -
array_keys($arr, $search):当$search不存在时返回空数组[](这点安全),但array_key_exists()返回布尔值,别混淆 -
array_column($arr, 'field'):若$arr不是数组,或$arr为空,返回空数组[];但若传入null或字符串,会触发警告并返回false -
array_filter($arr, $callback):回调返回false时过滤掉该元素;但如果$arr本身不是数组,会警告并返回false,不是[]
修改原数组却还返回值的函数
这类函数副作用明显,返回值易被误用,尤其在链式调用中出错。
-
array_push($arr, ...$values):修改$arr并返回新长度(int),不是数组本身。不能写array_push($arr, 1)[0]—— 会报错 -
sort($arr)、rsort($arr)、shuffle($arr)等排序/打乱函数:全部返回布尔值(成功为true),不是排序后的数组。必须用原变量获取结果 -
array_unshift($arr, ...$values)同样返回新长度,不是数组
对空/非法输入的隐式转换陷阱
PHP 自动类型转换常掩盖问题,导致逻辑偏差。
立即学习“PHP免费学习笔记(深入)”;
-
count(null)返回0(不是 warning),但count([])也返回0,无法区分“空数组”和“根本不是数组” -
in_array(null, [0, '', false])返回true(弱比较下null == 0、null == '');必须加第三个参数true启用严格模式 -
array_merge([], null)触发 warning 并返回false;而array_merge([], [])返回[];传参前务必用is_array()校验
键名处理不一致的函数
数字键、字符串键、空键在不同函数中行为差异大。
-
array_values($arr)重排数字索引,但不会改变关联键;而array_merge($arr)对关联数组等价于$arr,对数字索引数组却会重置键(从 0 开始) -
array_unique($arr)默认保留首个出现的键,但若$arr含0和"0",弱比较下视为重复,只留一个(取决于顺序) -
array_flip($arr):若原数组值不可作为键(如数组、对象),直接返回false;若存在重复值,后出现的会覆盖前面的键
用好 PHP 数组函数的关键是:查文档看清楚「返回值」和「副作用」两栏;对所有外部输入做 is_array() 检查;涉及查找、比较时强制用严格模式;避免依赖返回值做后续数组操作,优先以原变量为准。











