定义和用法
PHP 的 array_chunk() 函数用于将一个数组分割成多个“块”(子数组),每个块包含指定数量的元素。此函数非常适合处理需要分批操作数据的场景,例如分页显示、批量处理等。
此函数首次在 PHP 版本 4.2.0 中引入。
功能
- 将原数组按指定大小分割成多个子数组。
- 可选择保留原数组的键名或重新索引。
- 返回一个包含所有块的多维数组。
语法
array array_chunk ( array $array, int $size, bool $preserve_keys = false )
参数
| 参数 | 描述 |
|---|---|
| $array | (必填)待分割的输入数组。 |
| $size | (必填)每个块包含的元素数量(正整数),若 $size < 1,函数返回 null 并触发警告。 |
| $preserve_keys | (可选)
|
返回值
- 成功时返回分割后的多维数组。
- 错误时返回 null(如参数无效)。
示例
1. 基本用法(默认重新索引键)
$input = ["Apple", "Banana", "Orange", "Grape", "Mango"];
$result = array_chunk($input, 2);
print_r($result);
输出
Array
(
[0] => Array
(
[0] => Apple
[1] => Banana
)
[1] => Array
(
[0] => Orange
[1] => Grape
)
[2] => Array
(
[0] => Mango
)
)
(
[0] => Array
(
[0] => Apple
[1] => Banana
)
[1] => Array
(
[0] => Orange
[1] => Grape
)
[2] => Array
(
[0] => Mango
)
)
2. 保留原键名(关联数组分割)
$input = ["a" => "Apple", "b" => "Banana", "c" => "Orange", "d" => "Grape"];
$result = array_chunk($input, 2, true);
print_r($result);
输出
Array
(
[0] => Array
(
[a] => Apple
[b] => Banana
)
[1] => Array
(
[c] => Orange
[d] => Grape
)
)
(
[0] => Array
(
[a] => Apple
[b] => Banana
)
[1] => Array
(
[c] => Orange
[d] => Grape
)
)
3. 块大小超过数组长度
$input = [1, 2, 3];
$result = array_chunk($input, 5);
print_r($result);
输出
Array
(
[0] => Array
(
[0] => 1
[1] => 2
[2] => 3
)
)
(
[0] => Array
(
[0] => 1
[1] => 2
[2] => 3
)
)
注意事项
1、键名处理规则
- 默认情况下($preserve_keys = false),子数组的键会被重新索引为从0开始的整数。
- 若启用 $preserve_keys = true,原数组的键名(包括字符串键)会被保留。
2、最后一个块的大小
如果原数组元素总数不能被 $size 整除,最后一个块的元素数量会小于 $size。3、非数组输入
若传入非数组参数,函数返回 null 并触发警告:
$result = array_chunk("not_an_array", 2); // 警告:参数1必须是数组
4、多维数组
array_chunk() 不会递归处理多维数组,仅分割第一层:
$input = [[1, 2], [3, 4], [5, 6]];
$result = array_chunk($input, 2);
// 输出:[[[1,2], [3,4]], [[5,6]]]
常见应用场景
1、分页显示数据
将数据库查询结果分割成每页显示固定数量的条目:
$page = 2; // 当前页码
$perPage = 5;
$data = array_chunk($allData, $perPage);
$currentPageData = $data[$page - 1] ?? [];
2、批量处理任务
分割任务列表,分批执行以避免资源过载:
$tasks = [/* 大量任务 */];
$batches = array_chunk($tasks, 100);
foreach ($batches as $batch) {
processBatch($batch);
}
3、格式化输出数据
将一维数组转换为表格形式的二维结构:
$items = ["A", "B", "C", "D", "E", "F"];
$table = array_chunk($items, 3);
// 输出表格:每行3列
总结
array_chunk() 是处理数组分块的便捷工具,通过合理设置块大小和键名保留选项,可灵活应对多种业务场景。使用时需注意参数的合法性,并结合实际需求选择是否保留原键名。

