array_is_list()判定数组键是否为从0开始的连续整数序列,空数组返回true;存在字符串键、浮点键、起始非0、键缺失或跳跃均返回false,用于精准区分索引数组与关联数组及优化JSON序列化。

array_is_list() 的判定规则非常明确:只看数组的键(key),不看值(value);要求键必须是严格从 0 开始、全部为整数类型、连续递增无跳号 的序列,即键集合必须恰好等于 [0, 1, 2, ..., count($array) - 1]。
核心判定条件
以下任一不满足,array_is_list() 就返回 false:
- 存在任意字符串键(如
'id'、'0'带引号) - 存在浮点数键(如
1.5)、布尔键(true)、null键或对象键 - 整数键未从
0起始(如[5 => 'x']) - 整数键有跳跃(如
[0 => 'a', 2 => 'c'])或缺失(如长度为 3 但只有键0和1)
几个典型例子
这些数组调用 array_is_list() 的结果:
-
[]→ true(空数组被明确定义为合法 list) -
[0 => 'a', 1 => 'b', 2 => 'c']→ true -
[1 => 'x', 2 => 'y']或[0 => 'a', 2 => 'c']→ false -
['name' => 'tom']或[0 => 'a', 'age' => 25]→ false
和旧方法的本质区别
它不是靠遍历或排序模拟判断,而是直接检查键的结构是否符合「标准列表」定义:
立即学习“PHP免费学习笔记(深入)”;
- 不依赖
ksort()—— 排序不能修复原始断层,且会修改原数组 - 不比较
array_values($arr)和原数组 —— 类型和结构不匹配,易误判 - 不逐个用
is_int()检查 —— 即使全是整数,也可能起始错、中间缺
实际用途很直接
这个函数主要解决两类高频问题:
- 区分「索引数组」和「关联数组」:用
!array_is_list($arr)可安全判断是否为关联数组(前提是已是数组) - 确保 JSON 序列化行为可控:
json_encode()在 PHP 8.1+ 中会依据array_is_list()结果决定输出[]还是{}



















