推荐使用 empty($arr) 判断索引数组是否为空,因其安全、简洁、语义清晰,能正确处理未定义、null 和空数组;count($arr) === 0 虽可行但需确保变量为数组,否则易触发警告或错误。

用 empty() 判断最直接
索引数组为空,本质是数组中没有元素,empty() 正好检测这个状态。它对空数组、null、false、0、"" 等都返回 true,但对非空索引数组(哪怕键是 0、1 等数字)返回 false,行为符合预期。
常见错误是误用 isset($arr) —— 只要变量已声明且不为 null,就返回 true,哪怕数组是空的;也有人用 count($arr) === 0,虽可行但多一次函数调用,且在未初始化变量时会触发 Notice。
-
empty($arr)安全、简洁、语义清晰,推荐作为首选 - 如果变量可能未定义,
empty()仍安全;count()会报Warning: count(): Parameter must be an array or an object that implements Countable - 注意:如果数组里有值为
0、false或""的元素,empty()不受影响——它只看数组长度,不是看元素值
count() 可以用,但要注意变量是否已定义
当确定变量一定存在且是数组时,count($arr) === 0 是准确的。它的优势是显式表达“长度为 0”,可读性对部分人更直观。
但风险在于:若 $arr 是 null、字符串、对象或未定义,count() 会触发警告甚至错误(PHP 8+ 对非 Countable 类型抛 TypeError)。
- 仅在能确保
$arr是数组或null时使用,且建议配合is_array():is_array($arr) && count($arr) === 0 - PHP 7.2+ 中,
count()对非数组/Countable 类型返回1(不报错但结果错误),容易埋坑 - 性能上,
count()在 PHP 7.2+ 对数组是 O(1),和empty()差异可忽略,不必为这点优化牺牲安全性
别用 array_keys($arr) === [] 或其他花式写法
有人试图通过键名是否为空数组来判断,比如 array_keys($arr) === [],这不仅冗余,还引入额外开销(生成新数组)和类型陷阱(=== 要求类型一致,而 array_keys() 返回的是整数键数组,与字面量 [] 比较在某些版本下可能意外失败)。
-
array_keys($arr) === []在 PHP 8.0+ 可能因类型推导问题返回false,即使数组为空 -
!$arr看似简短,但会把非空但首元素为0、false、""的数组误判为空(因为数组被转为布尔值,取决于首元素) - 索引数组和关联数组在此场景下无区别:
empty()对两者都按元素数量判断,无需区分
实际开发中该选哪个?
绝大多数情况,empty($arr) 就够了。它覆盖变量未定义、null、空数组三种常见边界,代码短,意图明确,PHP 内部也做了优化。
真正需要警惕的,是把「数组为空」和「数组中所有值都为假值」混淆。比如 [0, false, ""] 是非空数组,empty() 返回 false —— 这正是你想要的,除非你的业务逻辑真要求检查“全为 falsy 值”,那另当别论。
别为了“看起来更精确”去套用复杂判断,空数组就是长度为 0,empty() 就是为此设计的。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











