Menu

PHP array_slice(): получить часть массива

array_slice($array, $offset, $length) возвращает копию части массива, не меняя оригинал. Отрицательные смещения для последних элементов, preserve_keys, постраничный вывод списка и отличие от array_splice.

На этой странице есть исполняемые редакторы: меняйте, запускайте и сразу видите результат.

array_slice($array, $offset, $length) возвращает новый массив из $length элементов начиная с позиции $offset. Исходный массив не меняется. Не указывайте $length, чтобы взять всё до конца.

Смещение это позиция (0 это первый элемент), а не ключ. Это важно для ассоциативных массивов и для массивов, ключи которых не 0, 1, 2.

Последние N элементов через отрицательное смещение

Отрицательное смещение отсчитывается с конца: -1 это последний элемент, -3 начинает с третьего от конца. Отрицательная длина останавливается за столько элементов до конца.

Запросить больше элементов, чем есть, можно: array_slice($log, 0, 100) вернёт все пять.

Сохранение исходных ключей через preserve_keys

Целочисленные ключи перенумеровываются с 0, если не передать true четвёртым аргументом. Строковые ключи сохраняются всегда.

Передавайте true, когда ключи что-то значат, например это ID из базы данных, и позже вы будете искать элементы по ним.

Пагинация массива через array_slice

Показать страницу $page списка по $perPage элементов на странице можно одним срезом: смещение равно ($page - 1) * $perPage. Этот пример выводит HTML-список со ссылками на страницы. Запустите его и нажмите на номер страницы: тот же скрипт выполнится снова с $_GET['page'] из ссылки.

Строка с max(1, min($pages, ...)) удерживает введённый вручную ?page=99 или ?page=-1 в допустимых пределах. С базой данных вы бы запрашивали только одну страницу через LIMIT и OFFSET, а не загружали все строки, но для списка, который уже в памяти, array_slice делает всю работу.

array_slice и array_splice

Их имена отличаются одной буквой, а с оригиналом они делают противоположное. array_slice копирует часть. array_splice вырезает часть из переданного массива, перенумеровывает его и возвращает удалённые элементы. Ещё она может вставить замену на место выреза.

array_slicearray_splice
Меняет оригиналнетда (по ссылке)
Возвращаетвыбранную частьудалённую часть
Может вставлять элементынетда, четвёртым аргументом
Целочисленные ключиперенумерованы, если нет preserve_keysперенумерованы

Другие способы удалить элементы описаны на странице об удалении элементов из массива.

Разбиение массива на части

Когда нужны все страницы сразу, например чтобы выложить товары рядами по три, array_chunk делает повторяющиеся срезы за вас.

Поменяйте 3 на 2 или 4 и запустите снова. В последней части окажется то, что осталось.

Часто задаваемые вопросы

Как получить первые N элементов массива в PHP?

array_slice($arr, 0, 3) возвращает первые три элемента. Если в массиве меньше трёх, вы получите все, и ошибки не будет.

Как получить последние N элементов массива?

Используйте отрицательное смещение: array_slice($arr, -3) возвращает последние три элемента. Если длину не указывать, это значит "до конца".

Что делает preserve_keys в array_slice?

По умолчанию array_slice перенумеровывает целочисленные ключи с 0. Передайте true четвёртым аргументом, array_slice($arr, 2, 3, true), чтобы сохранить исходные целочисленные ключи. Строковые ключи сохраняются всегда, с ним или без него.

Чем array_slice отличается от array_splice?

array_slice возвращает копию части массива и не трогает оригинал. array_splice принимает массив по ссылке, вырезает из него эту часть (при желании вставляя замену) и возвращает вырезанное.

Иллюстрация языков программирования Coddy

Учитесь программировать с Coddy

НАЧАТЬ