W3docs

array_splice()

Как использовать array_splice в PHP для удаления, замены и вставки элементов array, с примерами и описанием параметров.

Работа с массивами — неотъемлемая часть программирования, и PHP предоставляет ряд встроенных функций для работы с массивами. Одна из наиболее гибких — array_splice: единственная функция, которая умеет удалять, заменять и вставлять элементы в любой позиции. В отличие от array_slice(), которая копирует фрагмент array, не изменяя оригинал, array_splice модифицирует array на месте и возвращает удалённые элементы.

На этой странице описана сигнатура функции, поведение каждого параметра (включая часто вызывающие вопросы отрицательные смещения и перенумерацию ключей), а также приведены примеры для трёх основных сценариев использования: удаления, замены и вставки.

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

array_splice — это встроенная функция PHP, которая позволяет удалять или заменять элементы array и добавлять новые элементы на их место. Функция изменяет исходный array и возвращает удалённые элементы (если таковые имеются). Функция принимает три обязательных параметра и два необязательных:

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

array_splice(array &$input, int $offset, ?int $length = null, mixed $replacement = [])
  • $input: входной array, который будет изменён
  • $offset: индекс, с которого начинается операция
  • $length (необязательный): количество удаляемых элементов. Если не указан, будут удалены все элементы от $offset до конца array
  • $replacement (необязательный): элементы, которые будут вставлены вместо удалённых. Если не указан, новые элементы не вставляются

Как работает функция array_splice?

Функция array_splice оперирует входным array: начиная с указанного смещения, удаляет заданное количество элементов. Если длина не указана, удаляются все элементы от смещения до конца array. Удалённые элементы возвращаются в виде array.

Если указан параметр $replacement, функция вставляет элементы замены на место удалённых. Элементы замены могут быть любого типа данных, в том числе массивами. Если параметр $replacement не указан, новые элементы не вставляются, и функция просто удаляет указанные элементы.

Функция изменяет входной array на месте, то есть исходный array изменяется в результате операции. Поскольку первый параметр передаётся по ссылке (&$input), необходимо передавать переменную — нельзя применять array_splice непосредственно к литеральному array или результату вызова другой функции.

Отрицательное смещение и длина

Оба параметра — $offset и $length — принимают отрицательные значения, которые отсчитываются с конца array:

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

Как затрагиваются ключи

array_splice предназначена для последовательных (списочных) массивов. После операции числовые ключи всегда перенумеруются с 0, тогда как строковые ключи сохраняются. Если необходимо сохранить числовые ключи неизменными, array_splice не подходит — используйте array_slice() с флагом preserve_keys.

Примеры

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

Допустим, у нас есть array чисел, и нам нужно удалить первые три элемента. Для этого можно использовать функцию array_splice следующим образом:

PHP: удаление элементов из array с помощью array_splice

php— editable, runs on the server

В этом примере array $numbers будет изменён, и первые три элемента будут удалены. Удалённые элементы будут возвращены в переменную $removed. После вызова функции значение $numbers станет [4, 5, 6], а значение $removed[1, 2, 3].

Замена элементов в array

Допустим, у нас есть array имён, и нам нужно заменить третье и четвёртое имена новыми. Для этого можно использовать функцию array_splice следующим образом:

PHP: замена элементов в array с помощью array_splice

php— editable, runs on the server

В этом примере array $names будет изменён, и третье и четвёртое имена будут заменены именами 'Alex' и 'Olivia'. После вызова функции значение $names станет ['John', 'Mary', 'Alex', 'Olivia', 'Sarah']. Обратите внимание, что количество элементов замены не обязано совпадать с количеством удалённых — можно заменить два элемента пятью или вовсе без замены.

Вставка элементов в array

Допустим, у нас есть array букв, и нам нужно вставить буквы 'B' и 'C' в начало array. Для этого можно использовать функцию array_splice следующим образом:

PHP: вставка элементов в array с помощью array_splice

php— editable, runs on the server

В этом примере array $letters будет изменён, и буквы 'B' и 'C' будут вставлены в начало array. После вызова функции значение $letters станет ['B', 'C', 'D', 'E', 'F'].

Использование отрицательного смещения и длины

В этом примере с помощью положительного смещения и отрицательной длины удаляется всё между первым и последним элементом:

PHP: array_splice с отрицательной длиной

<?php

$items = ['first', 'a', 'b', 'c', 'last'];
$removed = array_splice($items, 1, -1);

print_r($items);   // ['first', 'last']
print_r($removed); // ['a', 'b', 'c']
?>

Здесь $offset равен 1 (начало после 'first'), а $length равен -1 (остановить за один элемент до конца, сохранив 'last'), поэтому три средних элемента удаляются и возвращаются.

Связанные функции

array_splice перекрывается с несколькими более узкоспециализированными функциями array. Выбирайте наиболее подходящую — это делает намерение кода очевиднее:

  • array_slice() — извлечение фрагмента без изменения исходного array.
  • array_merge() — объединение массивов по порядку, а не в заданной позиции.
  • array_push() / array_unshift() — добавление элементов в конец или начало.
  • array_pop() / array_shift() — удаление одного элемента с конца или с начала.

Заключение

array_splice — универсальный инструмент редактирования массивов в PHP: один вызов может удалять, заменять или вставлять элементы в любой позиции. Запомните несколько ключевых моментов:

  • Функция изменяет входной array и возвращает удалённые элементы.
  • Количество элементов замены не зависит от количества удалённых.
  • Числовые ключи перенумеруются; строковые ключи сохраняются.
  • Отрицательные $offset и $length отсчитываются с конца array.

Если нужно только прочитать фрагмент без изменения источника, предпочтительнее array_slice().

Практика

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