2010-09-27 9 views
8

Myślę, że może nie rozumiem poprawnie, w jaki sposób array_splice ma działać. Rozumiem, że pierwszym parametrem jest początkowa tablica, drugim parametrem jest początek, a trzeci to długość lub liczba elementów do usunięcia/zamiany.Jak mogę usunąć pojedynczego elementu tablicy przy użyciu array_splice w php?

Tak więc, mają tę tablicę (wyjście 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)) 

że chce, aby całkowicie usunąć drugi element (tablicę z indeksem 1; TypeFlag = C, itd.) Nie chcą zastąp to czymkolwiek; aby zwrócić tablicę z pozostałymi dwoma elementami. Próbowałem to (gdzie koszyk jest nazwą tablicy):

$cart = array_splice($cart, 1,1); 

Ale to, co skończy się to tym, kiedy robi print_r: Pojawia

Array ([0] => Array ([TypeFlag] => C [qty] => 2 [denom] => 25 [certMessage] => [totalPrice] => 50)) 

więc być usunięcie 0 i 2 i pozostawiając 1 jako pozostałą część. Co ja robię źle?

Odpowiedz

14

array_splice zwraca tablicę składającą się z wyodrębnione elementy.

Robicie:

$cart = array_splice($cart, 1,1); 

Więc wyodrębniania 2nd element (indeks 1) i przypisujemy wynik z powrotem do $cart, zastępując oryginalną tablicę.

Aby całkowicie usunąć drugi element, nie należy przypisać wartości zwracanej array_splice z powrotem do $cart. Więc po prostu zrobić:

array_splice($cart, 1,1); 

To działa, ponieważ tablica jest przekazywane przez referencję do funkcji.

Także jeśli chcesz usunąć pojedynczy element z tablicy jej bardziej efektywne i czystsze w użyciu unset jak:

unset($cart[1]); 
+1

Jeśli więc mówić robiąc to wewnątrz funkcji i potrzebując zwrócić tablicę minus wybraną wartość, czy muszę najpierw przypisać $ cart do wartości tymczasowej (np. $ cartTemp = $ cart), a następnie spliczyć, a następnie przypisać tablicę do $ cart? Czy mogę po prostu zrobić array_splice ($ koszyk, 1, 1), a następnie zwrócić koszyk $? NIGDY UMYSŁ - po prostu wypróbowałem i działa, jeśli po prostu wykonuję array_splice, a następnie zwracam $ cart. Dzięki. – EmmyS

+1

Nie. Nie ma potrzeby przypisywania go do temp. Po prostu wywołaj funkcję, przekazując jej tablicę, a funkcja zmieni tablicę. – codaddict

+0

unset wymaga indeksowanych tablic, jeśli tablica nie ma indeksów unset dodaje je samodzielnie, a jeśli chcesz mieć kolekcję bez indeksów, wszystko jest w porządku .. – CookieMonster

5

array_splice zwraca „Usunięto/wymieniać” elementy, które jesteś następnie przypisanie nadpisać prawidłowo łączone $ Koszyk

$discard = array_splice($cart, 1,1); 

lub po prostu

array_splice($cart, 1,1); 
2

Po prostu użyj unset():

unset($cart[1]); 
3

Jedynym problemem związanym z użyciem opcji unset() jest to, że nie aktualizuje indeksów.

tj.

$arr = array('one', 'two', 'three', 'four'); 
print_r($arr); 

Tablica ( [0] => jedna [1] => dwa [2] => trzy [3] => cztery )

unset($arr[2]); 

print_r($arr); 

Tablica ( [0] => jedna [1] => dwa [3] => cztery )

natomiast array_splice ponownie indeksu tablicy

$arr = array('one', 'two', 'three', 'four'); 
array_splice($arr,2,1); 
print_r($arr); 

Tablica ( [0] => jedna [1] => dwa [2] => cztery )

Powiązane problemy