当前位置:首页 > 文章列表 > 文章 > php教程 > PHP array_is_list 对空数组返回什么

PHP array_is_list 对空数组返回什么

来源:17golang原创 2026-09-15 09:35:43 0浏览 收藏

在 PHP 里,array_is_list() 对空数组返回 true。这不是把空数组当成了“特殊例外”,而是因为 list 的定义是:键按顺序从 0count($array) - 1,空数组没有任何键,也就没有违反起点、连续性和顺序这三个条件。

官方地址:https://www.php.net/array-is-list

结论很明确:var_dump(array_is_list([])); 会输出 bool(true)。如果业务把空集合视为“没有数据”而不是“合法列表”,需要在调用前额外判断 $array !== []
要点速览
  • array_is_list([]) 的结果是 true,空数组符合 list 语义。
  • 从 0 开始、没有空洞、保持顺序,才是非空数组通过判断的关键。
  • PHP 8.1+ 使用内置函数;低版本兼容实现应逐项比较,别直接用会误判空数组的 range() 写法。

先用最小例子确认空数组结果

函数接收一个数组并返回布尔值。下面把空数组、一个元素的列表和关联数组放在一起,便于区分“为空”和“是不是 list”这两个概念。

 'php']));

// 如果业务要求至少有一项,再单独加入非空条件
$items = [];
$usableList = $items !== [] && array_is_list($items);
var_dump($usableList);
?>

前三次判断的结果依次是 truetruefalse;最后一次是 false,原因不是它不是 list,而是业务条件明确排除了空集合。这个区分很重要:数据结构判断和业务数量校验应该分开写。

array_is_list 的 list 定义其实允许空集合

PHP RFC 将 list 描述为键为 0 .. count($array)-1 且顺序正确的数组。对 [] 来说,count($array) 是 0,检查范围为空,函数自然返回 true。这与“空集合是某种集合”的数学直觉一致,也方便 JSON、序列化器和接口层统一处理空列表。

PHP array_is_list 空数组与连续键规则及 bool true 的静态关系框图
图1:空数组与连续键规则的静态关系示意;没有键并不等于违反从 0 开始的约束。

不要用下面这种简化逻辑替代原生函数:

问题在于 range(0, -1) 并不表达“没有期望键”。如果项目必须兼容 PHP 8.1 以前的版本,应明确处理空数组,或使用逐项比较的实现,而不是依赖这个隐含边界。

这些边界会改变 list 判断结果

判断 list 时只看键,不看值是不是字符串、对象或空值。下面这张图把常见输入放在同一张结构图里,排查时优先看四件事:是否从 0 起步、是否有空洞、是否按升序排列、是否混入字符串键。

PHP array_is_list 对从零索引、空洞、乱序和字符串键的静态结果对照图
图2:不同键结构与判断结果的静态对照示意,重点看起点、空洞、顺序和键类型。
输入结构结果原因
[]true没有键,未破坏连续规则
[0 => 'a']true从 0 开始且连续
[1 => 'a']false起点不是 0
[0 => 'a', 2 => 'c']false键 1 缺失,出现空洞
[1 => 'a', 0 => 'b']false键的迭代顺序不正确
['name' => 'a']false包含字符串键

例如 array_filter() 过滤列表后可能留下键空洞,后续若要把它作为 JSON 数组或接口列表传出,可先调用 array_values() 重排键,再调用 array_is_list() 做边界确认。重排键会改变键结构,但不会改变元素值。

旧版本 PHP 的兼容判断怎么写

array_is_list() 从 PHP 8.1 开始提供。需要支持旧运行环境时,可以只在函数不存在时声明兼容实现:

 $_value) {
            // 每次只接受当前期望的整数键,空数组会自然返回 true
            if ($key !== $expectedKey) {
                return false;
            }
            $expectedKey++;
        }
        return true;
    }
}
?>

这段实现没有创建额外的键数组,且把空数组当作合法 list。若项目的接口契约要求“非空列表”,仍然要在业务入口写清楚数量约束:

常见问题

空数组和 null 的判断结果一样吗?

不一样。空数组会返回 truenull 不是数组,传给这个函数会触发 TypeError。先用类型声明或 is_array() 处理输入边界。

array_is_list 会检查数组的值吗?

不会,它只关心键的起点、顺序和连续性。值为 null 或重复内容,不会单独导致 list 判断失败。

为什么 JSON 输出有时是对象而不是数组?

PHP 数组包含非连续或字符串键时,序列化结果可能表现为 JSON 对象。需要列表形态时,先整理键,再用 array_is_list() 确认结构。

因此,遇到“PHP array_is_list 对空数组返回什么”的问题,可以记住一句话:空数组在结构上是合法 list;是否允许它参与业务流程,是另一层需要显式表达的规则。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
Java HttpClient BodyHandlers.ofPublisher 如何处理 Publisher 取消Java HttpClient BodyHandlers.ofPublisher 如何处理 Publisher 取消
上一篇
Java HttpClient BodyHandlers.ofPublisher 如何处理 Publisher 取消
Go ticker 通道未消费时为什么不能补齐每次 tick
下一篇
Go ticker 通道未消费时为什么不能补齐每次 tick
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • PubMedQA数据集详解:生物医学问答基准、功能与应用指南
    PubMedQA
    深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
    31次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    133次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    68次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    25次使用
  • CMMLU中文大模型评估基准:功能、使用教程与应用场景解析
    CMMLU
    深入了解CMMLU中文评估基准,涵盖67个学科主题,提供数据集下载、Zero-shot/Five-shot评估方法及排行榜,助力优化中文语言模型性能。
    16次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码