Как удалить один элемент массива с помощью Array splice в php?
Я думаю, что я не могу правильно понять, как array_splice должен работать. Я понимаю, что первый парам-это ваш начальный массив, второй парам-это элемент для начала, а третий парам-это длина или количество элементов для удаления/замены.
Итак, у меня есть этот массив (вывод print_r):
Array (
[0] => Array ( [TypeFlag] => S [qty] => 1 [denom] => 25 [certMessage] => [totalPrice] => 25 )
[1] => Array ( [TypeFlag] => C [qty] => 2 [denom] => 25 [certMessage] => [totalPrice] => 50 )
[2] => Array ( [TypeFlag] => V [qty] => 2 [denom] => 25 [certMessage] => test [totalPrice] => 50 ) )
Я хочу полностью удалить второй элемент (массив с индексом 1; TypeFlag = C и т. д.) Я не хочу ничего заменять; просто вернуть массив с оставшимися двумя элементами. Я пробовал это (где cart-имя массива):
$cart = array_splice($cart, 1,1);
но то, что я в конечном итоге это при выполнении print_r:
Array ( [0] => Array ( [TypeFlag] => C [qty] => 2 [denom] => 25 [certMessage] => [totalPrice] => 50 ) )
таким образом, он, по-видимому, удаляет 0 и 2 и оставляет 1 в качестве остатка. Что я делаю не так?
5 ответов
array_splice
возвращает массив, состоящий из извлеченных элементов.
Вы делаете:
$cart = array_splice($cart, 1,1);
таким образом, вы извлекаете 2-й элемент (индекс 1) и присваиваете результат $cart
, перезапись исходного массива.
удалить 2-й элемент не присвоить возвращаемое значение array_splice
на $cart
. Так что просто сделайте:
array_splice($cart, 1,1);
это работает, потому что массив прошел по ссылке к функция.
кроме того, если вы хотите удалить один элемент из массива его более эффективным и чистым, чтобы использовать unset
as:
unset($cart[1]);
array_splice возвращает элементы" removed/replaced", которые затем назначаются для перезаписи правильно сращенного $cart
$discard = array_splice($cart, 1,1);
или просто
array_splice($cart, 1,1);
единственная проблема с использованием unset () заключается в том, что он не обновляет индексы.
то есть
$arr = array('one', 'two', 'three', 'four');
print_r($arr);
массив ( [0] => один [1] => двух [2] => три [3] => четыре )
unset($arr[2]);
print_r($arr);
массив ( [0] => один [1] => двух [3] => четыре )
в то время как array_splice будет переиндексировать массив
$arr = array('one', 'two', 'three', 'four');
array_splice($arr,2,1);
print_r($arr);
массив ( [0] => один [1] => двух [2] => четыре )