PHP中empty()判数组最易踩的坑是将含0、"0"、false、null等falsy值的非空数组误判为空,因其本质是判假(!$arr)而非判空;真正判空应使用is_array($arr) && count($arr) === 0。

PHP 的 empty() 判断数组时,最易踩的坑是:它把非空但含 0、"0"、false、null 等“falsy 值”的数组也当作空处理——其实不是数组为空,而是 empty() 在对数组做「整体真假判断」,而非「是否含有元素」。
empty() 本质不是「判空」,而是「判假」
empty($arr) 实际等价于 !$arr。它不关心数组里有没有 key,只看整个表达式是否为 falsy:
- 空数组
[]→true(符合预期) - 含一个元素
[0]→true(陷阱!0 是 falsy) - 含字符串
["0"]→true("0" 是唯一被认定为 falsy 的字符串) - 含
false或null→true(哪怕其他键存在)
正确判断数组是否「真正为空」该用 count()
判断数组有没有元素,唯一可靠方式是看长度:
-
count($arr) === 0→ 真正空数组 -
count($arr) > 0→ 至少有一个元素(不管值是什么) - 注意:
count()对非数组返回 1,所以必要时先用is_array()防御
isset() 和 array_key_exists() 不适用于数组整体判空
这两个函数作用对象是「某个键」,不是数组本身:
立即学习“PHP免费学习笔记(深入)”;
-
isset($arr)只检查变量是否已声明且不为null,对非空/空数组都返回true -
isset($arr[0])只看索引 0 是否存在且非 null,无法反映整个数组状态 -
array_key_exists(0, $arr)同理,只查单个 key
实战建议:按场景选方法
写代码时明确你要判断什么:
- 「这个变量是不是空数组?」→ 用
is_array($arr) && count($arr) === 0 - 「这个数组有没有任意元素?」→ 用
is_array($arr) && count($arr) > 0 - 「这个数组是否已定义且不是 null?」→ 用
isset($arr)(但别混淆为空) - 避免在数组判空逻辑中出现
empty($arr),除非你清楚它会把[0]当空
不复杂但容易忽略。关键在于分清「空」和「假」——PHP 里它们从来就不是一回事。











