array_is_list 是 php 8.2 新增函数,用于判断数组是否为从 0 开始、连续整数键的索引数组;仅当所有键为整数、从 0 起始且无空缺时返回 true,空数组也视为 list,php 8.2 以下需降级兼容。

array_is_list 是 PHP 8.2 新增的内置函数,专门用来判断一个数组是否为「索引数组(list)」——即键名是连续、从 0 开始的整数序列。它比手动检查 array_keys($arr) === range(0, count($arr)-1) 更简洁、高效,也更语义明确。
什么情况下返回 true
只有当数组满足以下全部条件时,array_is_list 才返回 true:
- 所有键名都是整数(不能是字符串数字如 "0" 或浮点数)
- 键名从 0 开始
- 键名连续递增,无空缺(例如 0,1,2,3…)
- 顺序不重要(PHP 数组本身保持插入顺序,但函数只看键,不依赖值顺序)
常见 true / false 示例
✅ 返回 true 的情况:
-
array_is_list([1, 2, 3])→ true(标准索引数组) -
array_is_list([])→ true(空数组也被视为 list) -
array_is_list([null, 'a', 42])→ true(值类型不影响判断)
❌ 返回 false 的情况:
-
array_is_list(['a' => 1, 'b' => 2])→ false(关联键) -
array_is_list([1 => 'x', 2 => 'y'])→ false(不从 0 开始) -
array_is_list([0 => 'a', 2 => 'b'])→ false(键不连续) -
array_is_list([0 => 'a', '1' => 'b'])→ false(混合整数键和字符串键) -
array_is_list([0.0 => 'a', 1 => 'b'])→ false(0.0 是 float,不是 int 键)
实际使用建议
这个函数适合用在需要「严格区分索引数组和关联数组」的场景,比如:
- JSON 编码前校验:确保数组能被 encode 成 JSON 数组(
[]),而非对象({}) - 函数参数预检:如某个方法只接受 list 形式的数据,可提前用
array_is_list($input) || throw new InvalidArgumentException(...) - 避免误用
foreach+key做索引逻辑时出错(比如期望 $i 就是键,但实际是关联数组)
注意兼容性
该函数仅在 PHP 8.2+ 可用。低版本需自行模拟(不推荐用于生产),例如:
(不推荐,仅作理解参考)function array_is_list($arr) { return $arr === [] || (array_keys($arr) === range(0, count($arr) - 1)); }
但要注意:这种模拟无法完全等价(比如对 float 键或某些内部结构的处理不如原生函数严谨)。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











