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.