Um ein Element über seinen Schlüssel aus einem PHP-Array zu entfernen, verwendest du unset($array[$key]). Das Element ist weg, die anderen Schlüssel bleiben genau, wie sie waren, und einen Schlüssel zu entfernen, der nicht existiert, ist kein Fehler.
Schau dir das zweite Ergebnis an: Die Schlüssel sind jetzt 0, 2, 3. unset nummeriert nie neu.
Das Array nach unset neu indizieren
Eine Liste mit einer Lücke in den Schlüsseln macht später Ärger: Eine Schleife for ($i = 0; ...) trifft auf den fehlenden Index, und json_encode schreibt ein JSON-Objekt statt eines Arrays. array_values() gibt dir wieder saubere Schlüssel.
Über die Position mit array_splice entfernen
array_splice($array, $offset, $length) entfernt $length Elemente ab Position $offset, nummeriert die Schlüssel neu und liefert, was es entfernt hat. Ein negativer Offset zählt vom Ende. Es kann im selben Aufruf auch Ersatzelemente einfügen.
array_splice arbeitet mit Positionen, nicht mit Schlüsseln: Bei einem assoziativen Array entfernt es nach Platz in der Reihenfolge und behält String-Schlüssel. Die Seite zu array_slice vergleicht es mit array_slice, das einen Teil kopiert, ohne das Original zu ändern.
Ein Element über den Wert entfernen
array_diff($array, [$value]) liefert das Array ohne jedes Element, das gleich $value ist, und behält die Schlüssel der übrigen. Um nur den ersten Treffer zu entfernen, suchst du seinen Schlüssel mit array_search und rufst unset auf.
array_diff vergleicht Werte als Strings, also entfernt array_diff([1, "1", 2], [1]) sowohl die Ganzzahl als auch den String. Wenn die Bedingung mehr ist als „gleich diesem Wert“, verwendest du array_filter mit einem Callback.
Das erste oder letzte Element entfernen
array_shift() entfernt das erste Element und array_pop() das letzte. Beide liefern das entfernte Element zurück, was sie praktisch für Warteschlangen und Stacks macht.
array_shift nummeriert numerische Schlüssel ab 0 neu. array_pop muss das nicht, weil die Lücke am Ende liegt.
Mehrere Schlüssel auf einmal entfernen
unset akzeptiert mehrere Elemente in einem Aufruf. Um eine Liste von Schlüsseln zu entfernen, die du in einem Array hast, drehst du sie mit array_flip() um, sodass die Namen zu Schlüsseln werden, und übergibst sie dann an array_diff_key().
Typischer Fehler: unset mit array_search, wenn der Wert fehlt
array_search liefert false, wenn es nichts findet, und false als Array-Schlüssel wird zu 0. Diese Zeile löscht also das erste Element, sobald der Wert nicht im Array steht:
Speichere das Ergebnis von array_search immer und vergleiche es mit !== false, bevor du es als Schlüssel verwendest. Ein einfaches if ($key) reicht auch nicht: Ein Treffer an Index 0 ist ebenfalls falsy.
Häufig gestellte Fragen
Wie entferne ich in PHP ein Element über seinen Wert aus einem Array?
Um jedes Vorkommen zu entfernen, verwendest du array_diff($arr, ['value']). Um nur das erste zu entfernen, suchst du seinen Schlüssel und rufst unset auf, nachdem du geprüft hast, dass er gefunden wurde: $k = array_search('value', $arr); if ($k !== false) { unset($arr[$k]); }.
Wie indiziere ich ein Array nach unset neu?
Setze es in array_values(): $arr = array_values($arr); nummeriert die Schlüssel ab 0 neu. Alternativ entfernst du das Element mit array_splice($arr, $index, 1), das für dich neu nummeriert.
Wie entferne ich das erste oder letzte Element eines Arrays?
array_shift($arr) entfernt das erste Element, liefert es zurück und nummeriert die numerischen Schlüssel neu. array_pop($arr) entfernt das letzte Element und liefert es zurück.
Kann ich in einer foreach-Schleife ein Element mit unset entfernen?
Ja. foreach ($arr as $k => $v) { if ($v < 0) { unset($arr[$k]); } } ist sicher, weil foreach über eine Kopie des Arrays läuft, während du das Original änderst. Die Schlüssel behalten ihre Lücken, also rufst du danach array_values() auf, wenn du eine Liste brauchst.
Verursacht unset bei einem fehlenden Schlüssel einen Fehler?
Nein. unset($arr['missing']) tut nichts und löst keine Warnung aus, du musst also nicht vorher mit isset prüfen.