判断php数组需区分未定义、null、空数组、含null元素四种情况:用isset($arr) && is_array($arr)确认存在且为数组;判空用isset($arr) && is_array($arr) && count($arr) === 0;查含null元素用in_array(null, $arr, true);取键值用$arr['key'] ?? null。

PHP 中判断数组是否为空或是否为 null,不能只靠 empty() 或 == null,必须区分「数组变量未定义」「值为 null」「空数组」「含 null 元素的数组」这几种情况,否则容易出错。
判断变量是否已定义且是数组
用 isset() + is_array() 组合最稳妥:
-
isset($arr) && is_array($arr):确保变量存在、不是null,且类型是数组 - 避免直接用
is_array($arr)—— 若$arr未定义,会触发 Notice - 不要用
!is_null($arr) && is_array($arr),因为未定义变量调用is_null()同样报错
判断数组是否为空(不含任何元素)
「空数组」指 array() 或 [],不含键值对:
-
isset($arr) && is_array($arr) && count($arr) === 0是最明确的方式 -
empty($arr)对空数组返回true,但它也会对null、false、0、''等“falsy”值返回true,不专用于数组 - 如果确定变量已是数组,可简写为
count($arr) === 0
判断数组中是否包含 null 值(作为元素)
数组本身可以是非空的,但某些键对应的值可能是 null:
立即学习“PHP免费学习笔记(深入)”;
- 用
in_array(null, $arr, true)检查是否存在严格等于null的元素(注意第三个参数true启用类型检查) - 用
array_filter($arr, 'is_null')获取所有null元素,再用count()判断数量 - 避免用
in_array(null, $arr)(不加true),它会把0、false、''也当作匹配
安全地访问数组某键并判断其是否为 null
常见场景:读取 $arr['key'],但不确定键是否存在,也不确定值是否为 null:
- 推荐写法:
isset($arr['key']) ? $arr['key'] : null——isset对不存在的键或值为null的键都返回false - 更简洁可用空合并操作符:
$arr['key'] ?? null(PHP 7+),它等价于上面三元表达式 - 不要用
empty($arr['key'])判断,因为0、false、''也会被误判为“空”











