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_slice | array_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 принимает массив по ссылке, вырезает из него эту часть (при желании вставляя замену) и возвращает вырезанное.