Возможности функции array_chunk в PHP
PHP имеет множество встроенных функций для работы с массивами. array_chunk разбивает массив на части заданного размера — удобно для пагинации и пакетной обработки.
PHP располагает большой коллекцией встроенных функций для работы с массивами, и array_chunk() — одна из наиболее полезных при работе с большими наборами данных. Она разбивает один array на серию меньших массивов («чанков») фиксированного размера, что упрощает пагинацию, пакетную обработку и отображение данных. В этой главе объясняется синтаксис, рассматриваются рабочие примеры, флаг preserve_keys и типичные ошибки.
Что такое функция array_chunk?
Функция array_chunk() разбивает array на меньшие массивы, каждый из которых содержит указанное количество элементов. Она полезна всякий раз, когда нужно разделить длинный список на равномерные группы — например, для отображения сетки из N столбцов, пакетной обработки записей или построения постраничного вывода.
Синтаксис
array_chunk(array $array, int $length, bool $preserve_keys = false): array| Параметр | Описание |
|---|---|
$array | Массив для разбиения. |
$length | Размер каждого чанка. Должен быть 1 или больше, иначе array_chunk() выбросит ValueError (PHP 8+) / вызовет предупреждение (PHP 7). |
$preserve_keys | Необязательный. false (по умолчанию) переиндексирует каждый чанк с 0; true сохраняет исходные ключи. |
Возвращаемое значение: новый многомерный array. Исходный массив никогда не изменяется — array_chunk() не работает «на месте».
Как работает array_chunk?
array_chunk() последовательно проходит по входному array и копирует элементы в новый подмассив, пока не наберёт $length элементов, после чего начинает новый чанк. Последний чанк содержит оставшиеся элементы, поэтому он может быть меньше остальных.
По умолчанию третий параметр preserve_keys равен false, что переиндексирует ключи каждого чанка начиная с 0. Установка значения true сохраняет исходные ключи массива — это важно, когда ключи несут смысловую нагрузку (например, string-ключи или непоследовательные идентификаторы).
Рассмотрим следующий пример:
PHP — определение массива
Если вызвать array_chunk для этого массива, передав значение 3 в качестве второго аргумента, получим следующий результат:
Array
(
[0] => Array
(
[0] => a
[1] => b
[2] => c
)
[1] => Array
(
[0] => d
[1] => e
[2] => f
)
[2] => Array
(
[0] => g
)
)Как видно, исходный массив разделён на три меньших массива, каждый из которых содержит три элемента (за исключением последнего, который содержит только один).
Сохранение исходных ключей
По умолчанию каждый чанк переиндексируется с 0. Передайте true в качестве третьего аргумента, чтобы сохранить исходные ключи:
<?php
$data = array("id10" => "a", "id20" => "b", "id30" => "c");
print_r(array_chunk($data, 2, true));
?>Вывод:
Array
(
[0] => Array
(
[id10] => a
[id20] => b
)
[1] => Array
(
[id30] => c
)
)Устанавливайте preserve_keys в true всякий раз, когда ключи идентифицируют данные (string-ключи, идентификаторы базы данных и т.д.); иначе они будут потеряны при следующей переиндексации.
Зачем использовать array_chunk?
Функция array_chunk чрезвычайно полезна для широкого круга задач, в том числе:
- Разбиение больших массивов на меньшие, более управляемые части для обработки.
- Постраничное отображение больших объёмов данных (например, разбиение массива результатов на меньшие массивы для вывода на нескольких страницах).
- Повышение производительности алгоритмов, работающих с массивами, за счёт уменьшения размера обрабатываемых массивов в каждый момент времени.
Пример использования: пагинация
Одним из наиболее распространённых сценариев применения функции array_chunk является пагинация. Рассмотрим следующий пример, где у нас есть array из 12 результатов, которые мы хотим отобразить на 2 страницах:
Пример использования функции array_chunk в PHP
array_chunk() делит 12 результатов на 2 страницы: первый чанк содержит 10 элементов, второй — оставшиеся 2. Каждый чанк соответствует одной странице, поэтому можно выводить $pages[0] для страницы 1, $pages[1] для страницы 2 и использовать count($pages) для формирования ссылок на страницы.
Типичные ошибки
$lengthдолжен быть не менее 1. Значение0или отрицательное число выброситValueErrorв PHP 8 и вызовет предупреждение в PHP 7.- Исходный массив остаётся неизменным.
array_chunk()возвращает новый массив; присваивайте результат переменной и не ожидайте изменения входных данных. - Порядок сохраняется, ключи — нет (по умолчанию). Элементы остаются в исходном порядке, но числовые ключи сбрасываются до
0..n, если не передатьpreserve_keys = true. - Последний чанк может быть короче. При переборе в цикле всегда учитывайте, что финальный чанк может быть меньше
$length.
Связанные функции
- array_slice() — извлечение одного непрерывного фрагмента массива без разбиения всего массива.
- array_splice() — удаление или замена части массива «на месте».
- array_merge() — объединение нескольких массивов в один.
- array_map() — применение функции обратного вызова к каждому чанку после разбиения.
- PHP Arrays — введение в индексированные и ассоциативные массивы.
Заключение
Функция array_chunk() — простой и эффективный способ разделить большой массив на меньшие равные части. Будь то пагинация результатов, пакетная обработка записей или формирование сетки, она делает работу с массивами понятной и предсказуемой. Помните о двух правилах, которые чаще всего вызывают ошибки: размер чанка должен быть не менее 1, а ключи переиндексируются, если явно не указать их сохранение.