W3docs

Возможности функции 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 — определение массива

php— editable, runs on the server

Если вызвать 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

php— editable, runs on the server

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, а ключи переиндексируются, если явно не указать их сохранение.

Практика

Практика
Какие из следующих утверждений о функции array_chunk в PHP верны?
Какие из следующих утверждений о функции array_chunk в PHP верны?
Was this page helpful?