PHP: Wie entfernt man ein Element aus einem Array?

Tue, Oct 19, 2021 3 Minuten zum Lesen

Wenn du aus einen PHP-Array mit aufeinanderfolgenden numerischen Indizes ein bestimmtes Element entfernen willst, musst du einige Dinge beachten. Darüber hinaus gibt es verschiedene Herangehensweisen.

Wichtig dabei ist im Hinterkopf zu behalten, dass es sich bei PHP-Arrays eigentlich um eine Datenstruktur handelt, welche eine Mischung aus (Java) Arrays und (Java) HashMaps darstellt.

Darüber hinaus sollte man daran denken, dass in PHP-Arrays sowohl die Schlüßel als auch die Werte einen beliebigen Datentype haben können welcher auch wechseln kann:

<?php
  $array = [0 => "a", "one" => 1, 2 => "c"];
  print_r($array);
?>
Array
(
    [0] => a
    [one] => 1
    [2] => c
)

Für die weiteren Beispiele soll nun folgendes PHP-Array unser Ausgangspunkt sein:

<?php
  $array = [
    0 => "a",
    1 => "b",
    2 => "c"
  ];
?>

Entfernen eines Array Elements

Entfernen mittels unset() Funktion

<?php
  $array = [0 => "a", 1 => "b", 2 => "c"];
  unset($array[1]);
  $array = array_values($array);

  print_r($array);
?>

Ausgabe:

Array
(
    [0] => a
    [1] => c
)

Wenn man die unset() benutzt werden die Array-Schlüssel nicht geändert. Um dafür zu sorgen, dass die Array-Elemente wieder durchgehend und in aufsteigender Reihenfolge indiziert werden muss man dann noch die Funktion array_values() anwenden.

Würde man im Beispiel oben auf das Element mit dem Index 2 zugreifen wollen (nachdem Aufruf der unset() Funktion) würde es übrigens zu einem Fehler führen.

Entfernen mittels array_splice() Funktion

<?php
  $array = [0 => "a", 1 => "b", 2 => "c"];
  array_splice($array, 1, 1);

  print_r($array);
?>

Ausgabe:

Array
(
    [0] => a
    [1] => c
)

Die array_splice() Funktion sorgt automatisch dafür, dass die Array-Elemente durchgehen und in aufsteigender Reihenfolge indiziert werden.

Entfernen mehrerer Array Elemente

Entfernen mittels array_filter() Funktion

<?php
  $array = [0 => "a", 1 => "b", 2 => "c"];
  $array = array_filter($array, function($key) {
    if ($key != 0 && $key != 1) {
        // Nur Elemente für welche die Callbackfunktion
        // "true" zurückgibt werden Teil des neuen Arrays.
        return true;   
    }
  }, ARRAY_FILTER_USE_KEY);
  $array = array_values($array);
  
  print_r($array);
?>

Ausgabe:

Array
(
    [0] => c
)

Die array_filter() Funktion erlaubt es eine Callback-Funktion auf jedes einzelne Array-Element anzuwenden:

function($key) {
  if ($key != 0 && $key != 1) {

      return true;   
  }
}

Nur wenn diese Callback-Funktion true zurückgibt, wird das Array-Element Teil des neuen Arrays. Das Flag ARRAY_FILTER_USE_KEY sorgt dafür, dass nur der Schlüßel und nicht der Wert des Array-Elements an die Callback-Funktion übergeben wird.

Auch bei der array_filter() Funktionbenutzt werden die Array-Schlüssel nicht geändert. Um dafür zu sorgen, dass die Array-Elemente wieder durchgehend und in aufsteigender Reihenfolge indiziert werden, muss man dann noch die Funktion array_values() anwenden.

Entfernen mittels array_diff_key() Funktion

<?php
  $array = [0 => "a", 1 => "b", 2 => "c"];
  $array = array_diff_key($array, [0 => "", 1 => ""]);
  $array = array_values($array);
  
  print_r($array);
?>

Ausgabe:

Array
(
    [0] => c
)

Auch bei der array_diff_key() Funktion werden die Array-Schlüssel nicht geändert. Um dafür zu sorgen, dass die Array-Elemente wieder durchgehend und in aufsteigender Reihenfolge indiziert werden, muss man dann noch die Funktion array_values() anwenden.

Hinweis zu Netcup (Werbung)

Der deutsche Hoster Netcup bietet unter anderem günstige und zugleich leistungsstarke Webhosting Pakete, KVM-basierte Root Server und dezidierte Server an. Mit unseren Gutscheincodes kannst du noch mehr Geld sparen (6€ bei deiner ersten Bestellung, 30% Rabatt auf alle KVM-basierten Root Server, ...).