Как удалить один элемент массива с помощью 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-т. е.

unset(nameofyourarray[indextoremove]);

http://php.net/manual/en/function.unset.php


единственная проблема с использованием 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] => четыре )


просто используйте unset ():

unset($cart[1]);