Menu

Usuwanie elementu z tablicy w PHP: unset, array_splice

unset($array[$key]) usuwa element po kluczu, array_splice usuwa po pozycji i numeruje od nowa, a array_diff usuwa po wartości. Poznaj każdy sposób, numerowanie od nowa po usunięciu i pułapkę z array_search, która usuwa niewłaściwy element.

Na tej stronie są działające edytory: edytuj, uruchamiaj i od razu zobacz wynik.

Aby usunąć element z tablicy w PHP po kluczu, użyj unset($array[$key]). Element znika, pozostałe klucze zostają dokładnie takie, jakie były, a usunięcie nieistniejącego klucza nie jest błędem.

Spójrz na drugi wynik: klucze to teraz 0, 2, 3. unset nigdy nie numeruje od nowa.

Numerowanie tablicy od nowa po unset

Lista z luką w kluczach sprawia później kłopoty: pętla for ($i = 0; ...) trafia na brakujący indeks, a json_encode zapisuje obiekt JSON zamiast tablicy. array_values() znów daje czyste klucze.

Usuwanie po pozycji przez array_splice

array_splice($array, $offset, $length) usuwa $length elementów od pozycji $offset, numeruje klucze od nowa i zwraca to, co usunęło. Ujemny offset liczy od końca. W tym samym wywołaniu może też wstawić elementy zastępcze.

array_splice działa na pozycjach, a nie kluczach: na tablicy asocjacyjnej usuwa według miejsca w kolejności i zachowuje klucze tekstowe. Strona array_slice porównuje ją z array_slice, które kopiuje fragment bez zmiany oryginału.

Usuwanie elementu po wartości

array_diff($array, [$value]) zwraca tablicę bez wszystkich elementów równych $value, zachowując klucze pozostałych. Aby usunąć tylko pierwsze dopasowanie, znajdź jego klucz przez array_search i usuń go.

array_diff porównuje wartości jako stringi, więc array_diff([1, "1", 2], [1]) usuwa i liczbę całkowitą, i string. Gdy warunek to coś więcej niż „równe tej wartości”, użyj array_filter z callbackiem.

Usuwanie pierwszego lub ostatniego elementu

array_shift() usuwa pierwszy element, a array_pop() ostatni. Obie zwracają usunięty element, co przydaje się przy kolejkach i stosach.

array_shift numeruje klucze liczbowe od 0. array_pop nie musi, bo luka powstaje na końcu.

Usuwanie kilku kluczy naraz

unset przyjmuje kilka elementów w jednym wywołaniu. Aby usunąć listę kluczy, którą masz w tablicy, odwróć ją przez array_flip(), żeby nazwy stały się kluczami, i przekaż do array_diff_key().

Częsty błąd: unset z array_search, gdy wartości brakuje

array_search zwraca false, gdy nic nie znajdzie, a false użyte jako klucz tablicy staje się 0. Ta linia usuwa więc pierwszy element za każdym razem, gdy wartości nie ma w tablicy:

Zawsze zapisuj wynik array_search i porównuj go z !== false, zanim użyjesz go jako klucza. Zwykłe if ($key) też nie wystarczy: dopasowanie pod indeksem 0 również jest traktowane jak fałsz.

Najczęściej zadawane pytania

Jak usunąć element z tablicy po wartości w PHP?

Aby usunąć każde wystąpienie, użyj array_diff($arr, ['value']). Aby usunąć tylko pierwsze, znajdź jego klucz i usuń go, sprawdzając, czy został znaleziony: $k = array_search('value', $arr); if ($k !== false) { unset($arr[$k]); }.

Jak ponumerować tablicę od nowa po unset?

Otocz ją przez array_values(): $arr = array_values($arr); numeruje klucze od 0. Możesz też usunąć element przez array_splice($arr, $index, 1), które numeruje za ciebie.

Jak usunąć pierwszy lub ostatni element tablicy?

array_shift($arr) usuwa i zwraca pierwszy element oraz numeruje od nowa klucze liczbowe. array_pop($arr) usuwa i zwraca ostatni element.

Czy można usunąć element wewnątrz pętli foreach?

Tak. foreach ($arr as $k => $v) { if ($v < 0) { unset($arr[$k]); } } jest bezpieczne, bo foreach przechodzi po kopii tablicy, podczas gdy ty zmieniasz oryginał. Klucze zachowują luki, więc jeśli potrzebujesz listy, wywołaj potem array_values().

Czy unset na brakującym kluczu powoduje błąd?

Nie. unset($arr['missing']) nic nie robi i nie zgłasza ostrzeżenia, więc nie musisz najpierw sprawdzać przez isset.

Ilustracja języków programowania w Coddy

Ucz się programowania z Coddy

ZACZNIJ