array_is_list() 判断数组是否为纯索引数组:空数组返回 true;稀疏或非零起始的整数键数组返回 false;字符串数字键(如 '0')或混合键数组均返回 false。

array_is_list() 是 PHP 8.1 引入的专用函数,用于判断一个数组是否为「纯索引数组」——即键必须严格为 0, 1, 2, ..., n-1 的连续整数序列,且不能有缺失、错序或非整数键。它不是简单看“有没有字符串键”,而是从结构上做精确判定。边界场景恰恰是它设计时重点覆盖的部分,处理方式清晰、一致。
空数组 [] 被明确视为列表
这是最常被忽略但官方明确定义的边界:空数组 [] 会返回 true。
- 逻辑依据:空数组没有键,自然满足“从 0 开始、连续、无缺口”的 vacuous truth(空真)条件
- 实际意义:避免在 JSON 序列化、API 响应组装等场景中对空数组做特殊分支处理
- 示例:
array_is_list([]) === true
稀疏索引数组一律判为非列表
只要整数键不连续,哪怕全是数字,也返回 false。
- 典型情况:
[0 => 'a', 2 => 'b'](跳过 1)、[1 => 'x', 2 => 'y'](不从 0 开始)、[0 => 'a', 1 => 'b', 3 => 'c'](中间缺 2) - 注意:
[1 => 'x', 0 => 'y']也返回false—— 键顺序不影响 array_keys() 提取结果,但array_is_list()内部检查的是键的集合结构,不是遍历顺序 - 该行为与
json_encode()对数组的编码逻辑完全对齐:稀疏数组会被编码为 JSON 对象而非数组
字符串数字键(如 '0'、'1')直接导致判定失败
键类型必须是整数,字符串形式的数字(即使内容是 "0"、"1")不被接受。
立即学习“PHP免费学习笔记(深入)”;
- 示例:
['0' => 'a', '1' => 'b']→false;[0 => 'a', 1 => 'b']→true - 原因:PHP 中
'0'是 string 类型,0是 int 类型,类型不同即结构不符 - 常见陷阱:从 JSON 解码、表单提交、YAML 加载等外部来源获取的数组,键可能被解析为字符串,需提前用
array_values()或重键处理
混合键数组无需额外判断,天然返回 false
含任意非整数键(如 'name'、null、1.5、true)的数组,结果恒为 false。
- 例如:
[0 => 'a', 'name' => 'bob']、[true => 'x', false => 'y']、[0 => 'a', 1.5 => 'b'] - 无需先过滤或遍历,
array_is_list()一次调用即可得出结论 - 这比手写循环 +
is_int(key)更可靠,因为它同时验证了「类型 + 连续性 + 起始值」三重条件



















