判断php数组是否为空需区分三种状态:变量未定义、值为null、或确实是空数组;最安全方式是isset($arr) && is_array($arr) && count($arr) === 0,可精准识别空数组且避免警告。

检测 PHP 数组是否为空,关键不是只看“看起来空”,而是要分清三种常见状态:变量未定义、值为 null、或确实是空数组 []。不同场景需要不同判断策略,否则容易误判或触发警告。
确认变量存在且是数组类型
这是最安全的起点。直接对未定义变量或字符串调用 count() 会报 Warning;用 empty() 虽不报错,但会把 0、false、"0" 也当成空。所以先做类型和存在性校验:
- 用
isset($arr)确保变量已声明且不为null - 再用
is_array($arr)确认它是数组(排除字符串、对象等) - 只有两者都为
true,才进入下一步判断
精准判断空数组(推荐组合)
在确认是有效数组的前提下,用以下写法可100%识别空数组:
-
count($arr) === 0—— 元素数量为 0,就是空数组 - 完整条件:
isset($arr) && is_array($arr) && count($arr) === 0 - 等价写法:
is_array($arr) && !count($arr)(因为!0为true)
这个组合不会把 [0]、[false]、[""] 当成空,也不会因 null 或字符串报错。
快速容错判断(适合模板层)
在 HTML 混合输出或简单逻辑中,追求简洁和容错性,可用 empty():
-
empty($arr)对[]、null、未定义变量、""、0、false都返回true - 优点:不报 Notice,一行搞定
- 缺点:若数组含
0(如[0, 1, 2]),empty()仍返回false;但若含[0],它却返回true——这常是业务陷阱
区分“结构空”和“逻辑空”
有时候你关心的不是数组有没有元素,而是“有没有真正有用的数据”:
-
结构空:数组长度为 0 → 用
count() === 0判断 -
逻辑空:数组有元素,但全是空字符串、
null、false、0等 → 用count(array_filter($arr)) === 0 - 注意:
array_filter()默认移除所有 falsy 值;若需保留0或"0",必须传回调函数,例如:array_filter($arr, fn($v) => trim((string)$v) !== '')
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











