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