array_chunk 是 PHP 中最直接安全的数组分块函数,专为固定大小切分设计,不修改原数组、不漏元素、性能优;需校验输入是否为数组及 size 是否为正整数。

array_chunk 是 PHP 里最直接、最安全的数组分块方式,别折腾 for 循环或手动 array_slice 拼接了。
为什么 array_chunk 是首选?
它专为“按固定大小切数组”而生,底层 C 实现,不改原数组,不漏元素,也不多占内存。比手写循环快,比用 array_splice 边切边删更稳妥——尤其处理大数组时,后者容易因引用计数或键重排出错。
常见错误现象:array_chunk($arr, 3) 返回空数组?大概率是 $arr 本身是 null 或非数组(比如 JSON 解码失败返回 null),函数不会报错,但静默返回 []。
- 使用前务必确认
is_array($arr),否则后续逻辑可能崩得无声无息 - 如果
$arr是关联数组,array_chunk默认保留键名,但分块后每块都是索引数组(外层键从 0 开始) - 最后一块长度不足指定大小时,自动截断,不会补
null或重复元素
array_chunk 的第三个参数:保留原始键名
默认情况下,分块后的子数组内部键名会被重置为数字索引(0,1,2…),但有时你希望保留原始键——比如处理用户数据时,['id' => 123, 'name' => 'a'] 被 chunk 后仍想按 id 查找。
立即学习“PHP免费学习笔记(深入)”;
这时传 true 作第三个参数:array_chunk($arr, 2, true)。
- 只影响子数组内部键名,不影响外层数组的索引(外层永远是 0,1,2…)
- 性能略低(需复制键映射),小数组无感,超万级元素建议压测对比
- 若原数组有重复键名(如多次
['id' => 1]),开启此选项会导致后出现的覆盖先出现的——PHP 数组键唯一,这是语言特性,不是函数 bug
遇到非整数 $size 或负数怎么办?
array_chunk 对 $size 参数非常严格:必须是大于 0 的整数。传浮点数(如 3.7)、字符串数字(如 "5")、负数或 0,都会触发警告并返回 false。
错误信息:Warning: array_chunk(): Size parameter expected to be greater than 0
- 别依赖类型自动转换,显式
(int)强转前先校验:if ($size - 从 URL 或表单接收的
$size,很可能带空格或单位(如"10px"),用filter_var($size, FILTER_VALIDATE_INT)更可靠 - 想实现“最多 N 个元素分一组”,但允许最后一组更小?这就是
array_chunk的本职工作,不用额外判断
真正容易被忽略的是:当原数组为空或只有几个元素时,array_chunk 返回的仍是数组(哪怕只有一项或空数组),别在后续代码里假设“一定有至少两块”然后直接取 $chunks[1]——这会触发未定义索引 Notice。











