PHP - array_chunk() 函数


定义和用法

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 (可选)
  • true:保留原数组的键名。
  • false:(默认)重新索引子数组的键(从0开始)。

返回值

  • 成功时返回分割后的多维数组。
  • 错误时返回 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
        )
)

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
        )
)

3. 块大小超过数组长度

$input = [1, 2, 3];
$result = array_chunk($input, 5);
print_r($result);

输出

Array
(
    [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() 是处理数组分块的便捷工具,通过合理设置块大小和键名保留选项,可灵活应对多种业务场景。使用时需注意参数的合法性,并结合实际需求选择是否保留原键名。