W3docs

Функция PHP array_slice: подробное руководство

Как использовать PHP array_slice() для извлечения части array по смещению и длине: отрицательные индексы, сохранение ключей и практические примеры.

array_slice() извлекает часть PHP array и возвращает её в виде нового array, не затрагивая оригинал. Это правильный инструмент, когда вам нужно получить «элементы с 5 по 10», первые или последние N элементов, либо страницу результатов. В руководстве рассмотрены сигнатура функции, поведение аргументов $offset, $length и $preserve_keys (включая отрицательные значения), особенности работы с числовыми ключами и ряд практических примеров.

Что такое функция PHP array_slice?

Функция array_slice — это встроенная функция PHP, которая позволяет извлекать срез array на основе начального индекса и длины. Синтаксис функции выглядит следующим образом:

Синтаксис функции PHP array_slice

array array_slice ( array $array , int $offset [, int $length = NULL [, bool $preserve_keys = false ]] )
  • $array — array, из которого берётся срез. Передаётся по значению, поэтому оригинальный array никогда не изменяется.
  • $offset — начальный индекс среза. Если положительный, срез начинается с этого элемента от начала. Если отрицательный — с этого элемента от конца array (-2 означает «начать со второго элемента с конца»).
  • $length (необязательный) — количество элементов для извлечения. Если не указан или равен null, срез продолжается до конца array. Если отрицательный, срез заканчивается на столько элементов раньше конца. Если превышает количество оставшихся элементов, возвращаются все оставшиеся.
  • $preserve_keys (необязательный, по умолчанию false) — см. примечание о сохранении ключей ниже.

Функция возвращает новый array с выбранными элементами; оригинал остаётся нетронутым.

Отрицательные значения offset и length

Отрицательные значения ведут отсчёт от конца, что делает получение «последних N элементов» и «всего, кроме последнего элемента» тривиальным:

PHP array_slice с отрицательными значениями offset и length

<?php
$letters = array("a", "b", "c", "d", "e");

print_r(array_slice($letters, -2));    // last 2: Array ( [0] => d [1] => e )
print_r(array_slice($letters, 1, -1)); // skip first and last: Array ( [0] => b [1] => c [2] => d )
?>

Обработка ключей

По умолчанию array_slice() переиндексирует числовые ключи, начиная с 0, но всегда сохраняет строковые (ассоциативные) ключи. Передайте четвёртый аргумент равным true, если нужно сохранить исходные числовые ключи:

Сохранение ключей в PHP array_slice

<?php
$num = array(10 => "x", 20 => "y", 30 => "z");

print_r(array_slice($num, 1));             // reindexed: Array ( [0] => y [1] => z )
print_r(array_slice($num, 1, null, true)); // kept:      Array ( [20] => y [30] => z )
?>

Ранее приведённый пример синтаксиса демонстрирует $preserve_keys = true в сочетании с отрицательным смещением:

PHP array_slice с сохранением ключей и отрицательным offset

<?php
$assoc = array("a" => 1, "b" => 2, "c" => 3, "d" => 4);
$slice = array_slice($assoc, -2, 2, true);
print_r($slice); // Output: Array ( [c] => 3 [d] => 4 )
?>

Как использовать функцию PHP array_slice?

Использовать функцию array_slice очень просто. Вот пример, демонстрирующий извлечение среза array, начиная с третьего элемента, включающего следующие два элемента:

Как использовать функцию PHP array_slice

php— editable, runs on the server

Как видно, полученный срез содержит элементы «cherry» и «date» — два элемента, начиная с третьего элемента исходного array.

Практические примеры использования функции PHP array_slice

Теперь, когда вы знаете, как использовать функцию array_slice, рассмотрим несколько практических примеров её применения.

Постраничный вывод результатов

Если вы работаете с большим набором данных — например, со списком товаров или статей блога — может потребоваться отображать результаты постранично, чтобы не перегружать пользователя информацией. Функция array_slice очень полезна в этом контексте: она позволяет извлекать срез набора данных на основе текущего номера страницы и количества элементов на странице. Вот пример:

PHP: постраничный вывод результатов с помощью функции array_slice

<?php

$dataset = range(1, 100); // Simulated dataset
$page = $_GET["page"] ?? 1; // Default to page 1 if not set
$itemsPerPage = 10;
$startIndex = ($page - 1) * $itemsPerPage;
$slice = array_slice($dataset, $startIndex, $itemsPerPage);

?>

Удаление элементов из array

Если в array есть элементы, которые нужно удалить, можно объединить array_slice() с array_merge() для создания нового array без них. (Если вы хотите удалить элементы на месте и изменить оригинальный array, используйте array_splice().) Вот пример:

PHP: использование функции array_slice совместно с функцией array_merge

php— editable, runs on the server

Изменение порядка элементов в array

Если нужно изменить порядок элементов в array, можно использовать функцию array_slice совместно с функцией array_merge для создания нового array с элементами в желаемом порядке. Вот пример:

PHP: изменение порядка элементов в array

php— editable, runs on the server

Как видно, полученный array содержит те же элементы, что и исходный, но в другом порядке.

Заключение

array_slice() извлекает часть array, не затрагивая оригинал, что делает её идеальной для постраничного вывода, получения первых или последних N элементов и создания переупорядоченных копий. Запомните два ключевых поведения: отрицательные $offset/$length ведут отсчёт от конца, а числовые ключи переиндексируются, если не передать $preserve_keys = true.

Для дальнейшего изучения смотрите array_splice() для удаления/замены элементов на месте, array_merge() для объединения срезов, и обзор PHP arrays для повторения принципов работы с arrays и ключами.

Практика

Практика
Что делает функция array_slice() в PHP?
Что делает функция array_slice() в PHP?
Was this page helpful?