PHP: Wie entfernt man ein Element aus einem Array?
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.