PHP 8.1新增集合函数分三类:判断类(array_is_list、array_is_assoc)优先,确保结构安全;定位类(array_key_first、array_key_last)需重置指针防错;操作类(array_chunk增强、array_filter保留键名)提升效率。均需注意PHP 8.1+兼容性。

整理PHP 8.1新增的集合相关函数(如array_is_list()、array_key_first()、array_key_last()等)时,需兼顾可读性、实用性与版本兼容性提示,避免把笔记写成手册式罗列。
按功能类别分组,不按字母顺序
先划出三类核心用途:判断类(array_is_list、array_is_assoc)、定位类(array_key_first、array_key_last)、操作类(array_chunk增强、array_filter保留键名选项)。每类用小标题隔开,不混排——比如array_is_list和array_key_first语义完全不同,放一起会干扰快速检索。
判断类函数必须放在最前面,因为它们是后续操作的前提。例如用array_chunk前若不确定是否为列表,可能意外打乱结构。
每个函数配「典型误用」+「修复写法」
方法一:array_is_list()误判空数组或索引跳变
立即学习“PHP免费学习笔记(深入)”;
错误写法:if (array_keys($arr) === range(0, count($arr)-1)) { ... }——这在键为字符串数字(如['0'=>'a','1'=>'b'])时返回true,但array_is_list()判定为false,因它严格要求键是整数且连续。
正确写法:if (array_is_list($arr)) { ... }——直接调用,不自行推导逻辑。【PHP 8.1+ 才可用,低版本需 polyfill 或手动校验】
方法二:array_key_first()在关联数组中取错键
有人以为它总返回第一个声明的键,实际它返回当前内部指针位置的键——如果之前执行过next()或end(),结果就不可靠。修复方式:调用前先reset($arr),再array_key_first($arr)。
关键函数加使用场景注释
① array_is_list($arr):仅用于判断是否适合json_encode()输出为JSON数组。若返回false,说明json_encode()会转成对象,前端解析时可能报错。
② array_key_last($arr):适合做分页游标计算,比如从$items取最后一条的id作为下一页WHERE id > ?条件,比count()再取$arr[count($arr)-1]['id']更安全——后者在空数组时报Undefined offset,而array_key_last()在空数组返回null,可直接判断。
③ array_filter($arr, ..., ARRAY_FILTER_USE_BOTH):PHP 8.0+ 新增标志位,允许闭包同时接收键和值。旧写法foreach后array_values()重索引,现在一步到位,但注意:若原数组是关联结构,此模式默认保留键名,不自动重置为数字索引。



















