Array splice: примеры (PHP)

Функция array_splice в PHP 8 и её практическое применение
Раздел: Работа с массивами
array_splice(array &$array, int $offset, ?int $length = null, mixed $replacement = []): array
Описание функции array_splice

Функция array_splice предназначена для вырезания и замены части массива. Она модифицирует исходный массив, удаляя элементы, начиная с указанного индекса, и, при необходимости, вставляет новые элементы на их место. Эта функция часто используется для манипуляций с массивами, когда требуется удалить или заменить элементы, не оставляя "дыр" в ключах, так как она автоматически переиндексирует массив.

Аргументы функции
  • array &$array (входной/выходной параметр): Исходный массив, который будет изменён. Передаётся по ссылке.
  • int $offset: Позиция, с которой начинается вырезка. Если значение положительное, отсчёт начинается с начала массива. Если отрицательное — с конца массива.
  • int $length = null: Количество удаляемых элементов. Если не указано, удаляются все элементы до конца массива. Если $length отрицательное, то удаление остановится на указанном количестве элементов от конца массива.
  • mixed $replacement = []: Массив или одиночный элемент для вставки на место удалённых. Если это не массив, он будет преобразован в массив из одного элемента.
Примеры использования array_splice
Удаление части массива
<?php
$array = ['a', 'b', 'c', 'd', 'e'];
$removed = array_splice($array, 2, 2);
print_r($array); // исходный массив после изменения
print_r($removed); // удалённые элементы
?>
Array
(
    [0] => a
    [1] => b
    [2] => e
)
Array
(
    [0] => c
    [1] => d
)
Замена части массива
<?php
$array = ['red', 'green', 'blue'];
array_splice($array, 1, 1, ['yellow', 'orange']);
print_r($array);
?>
Array
(
    [0] => red
    [1] => yellow
    [2] => orange
    [3] => blue
)
Использование отрицательных аргументов
<?php
$array = [1, 2, 3, 4, 5];
array_splice($array, -2, 1); // удаляет предпоследний элемент
print_r($array);
?>
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 5
)
Похожие функции в PHP
  • array_slice: Возвращает выбранную часть массива, не изменяя исходный. Используется, когда нужно получить часть массива для чтения.
  • unset: Удаляет элемент по ключу, но не переиндексирует массив. Подходит для ассоциативных массивов или когда сохранение индексов важно.
  • array_shift / array_pop: Удаляют первый или последний элемент массива соответственно. Эффективны для работы с концами массива.
  • array_push / array_unshift: Добавляют элементы в конец или начало массива. Для сложных вставок в произвольную позицию удобнее array_splice.
Типичные ошибки
Неправильный тип аргумента $replacement
<?php
$array = [1, 2, 3];
array_splice($array, 1, 1, 'new'); // Строка преобразуется в массив
print_r($array);
?>
Array
(
    [0] => 1
    [1] => new
    [2] => 3
)
Неожиданное поведение с ассоциативными массивами
<?php
$array = ['a' => 1, 'b' => 2, 'c' => 3];
array_splice($array, 1, 1);
print_r($array); // Ключи теряются, массив переиндексируется
?>
Array
(
    [0] => 1
    [1] => 3
)
Изменения в последних версиях PHP

В PHP 8.0 поведение функции array_splice не претерпело значительных изменений. Однако, начиная с PHP 7.4, при передаче неверного типа аргумента генерируется предупреждение TypeError вместо предупреждения. В PHP 8.0 все предупреждения такого типа были преобразованы в исключения.

Расширенные примеры
Удаление всех элементов до конца массива
Пример php
<?php
$array = ['foo', 'bar', 'baz'];
array_splice($array, 1); // удаляет все, начиная с индекса 1
print_r($array);
?>
Array
(
    [0] => foo
)
Вставка без удаления
Пример php
<?php
$array = [10, 20, 30];
array_splice($array, 2, 0, [25, 26]); // вставляет на позицию 2
print_r($array);
?>
Array
(
    [0] => 10
    [1] => 20
    [2] => 25
    [3] => 26
    [4] => 30
)
Использование с числовыми ключами не по порядку
Пример php
<?php
$array = [2 => 'a', 4 => 'b', 6 => 'c'];
array_splice($array, 1, 1, ['new']); // учитывает порядок элементов, а не ключи
print_r($array);
?>
Array
(
    [0] => a
    [1] => new
    [2] => c
)
Одновременное удаление и вставка разного количества элементов
Пример php
<?php
$array = ['яблоко', 'банан', 'вишня', 'финик'];
array_splice($array, 1, 2, ['груша', 'персик', 'слива']);
print_r($array);
?>
Array
(
    [0] => яблоко
    [1] => груша
    [2] => персик
    [3] => слива
    [4] => финик
)
Аналоги в других языках программирования
JavaScript: splice
let arr = ['a', 'b', 'c', 'd'];
let removed = arr.splice(1, 2, 'x', 'y');
console.log(arr); // ['a', 'x', 'y', 'd']
console.log(removed); // ['b', 'c']
[ 'a', 'x', 'y', 'd' ]
[ 'b', 'c' ]
Python: slice assignment
arr = ['a', 'b', 'c', 'd']
arr[1:3] = ['x', 'y']
print(arr) # ['a', 'x', 'y', 'd']
['a', 'x', 'y', 'd']
MySQL: нет прямой аналогии, но можно использовать строковые функции или операции с JSON-массивами.

PHP array_splice function comments

En
Array splice Remove a portion of the array and replace it with something else