Gibt es eine einfache Möglichkeit, ein Element aus einem Array mit PHP zu löschen, so dass foreach ($array)
dieses Element nicht mehr enthält?
Ich dachte, dass das Setzen auf null
reichen würde, aber anscheinend funktioniert das nicht.
Es gibt verschiedene Möglichkeiten, ein Array-Element zu löschen, wobei einige für bestimmte Aufgaben nützlicher sind als andere.
Wenn Sie nur ein Array-Element löschen wollen, können Sie \unset()
oder alternativ \array_splice()
verwenden.
Wenn Sie den Wert haben, aber den Schlüssel nicht kennen, um das Element zu löschen, können Sie \array_search()
verwenden, um den Schlüssel zu erhalten.
\unset()
MethodeBeachten Sie, dass bei der Verwendung von \unset()
die Array-Schlüssel nicht geändert/neu indiziert werden. Wenn Sie die Schlüssel neu indizieren wollen, können Sie \array_values()
nach \unset()
verwenden, was alle Schlüssel in numerische Aufzählungsschlüssel umwandelt, beginnend bei 0.
Code
<?php
$array = [0 => "a", 1 => "b", 2 => "c"];
\unset($array[1]);
//↑ Key which you want to delete
?>
Ausgabe
[
[0] => a
[2] => c
]
\array_splice()
MethodeWenn Sie \array_splice()
verwenden, werden die Schlüssel automatisch neu indiziert, aber die assoziativen Schlüssel ändern sich nicht, im Gegensatz zu \array_values()
, das alle Schlüssel in numerische Schlüssel umwandelt.
Außerdem benötigt \array_splice()
den Offset, nicht den Schlüssel! als zweiten Parameter.
Code
<?php
$array = [0 => "a", 1 => "b", 2 => "c"];
\array_splice($array, 1, 1);
//↑ Offset which you want to delete
?>
Ausgabe
[
[0] => a
[1] => c
]
array_splice()
und unset()
nehmen das Array als Referenz, und das bedeutet, dass Sie die Rückgabewerte dieser Funktionen nicht dem Array zuordnen wollen.
Wenn Sie mehrere Array-Elemente löschen wollen und \unset()
oder \array_splice()
nicht mehrfach aufrufen wollen, können Sie die Funktionen \array_diff()
oder \array_diff_key()
verwenden, je nachdem, ob Sie die Werte oder die Schlüssel der Elemente kennen, die Sie löschen wollen.
\array_diff()
]7 MethodeWenn Sie die Werte der Array-Elemente kennen, die Sie löschen wollen, können Sie \array_diff()
verwenden. Wie zuvor bei \unset()
werden die Schlüssel des Arrays nicht geändert/neu indiziert.
Code
<?php
$array = [0 => "a", 1 => "b", 2 => "c"];
$array = \array_diff($array, ["a", "c"]);
//└────────┘→ Array values which you want to delete
?>
Ausgabe
[
[1] => b
]
\array_diff_key()
MethodeWenn Sie die Schlüssel der Elemente, die Sie löschen wollen, kennen, können Sie \array_diff_key()
verwenden. Hier müssen Sie darauf achten, dass Sie die Schlüssel als Schlüssel im zweiten Parameter übergeben und nicht als Werte. Ansonsten müssen Sie das Array mit \array_flip()
umdrehen. Und auch hier werden die Schlüssel nicht geändert/neu indiziert.
Code
<?php
$array = [0 => "a", 1 => "b", 2 => "c"];
$array = \array_diff_key($array, [0 => "xy", "2" => "xy"]);
//↑ ↑ Array keys which you want to delete
?>
Ausgabe
[
[1] => b
]
Auch wenn Sie \unset()
oder \array_splice()
verwenden möchten, um mehrere Elemente mit demselben Wert zu löschen, können Sie \array_keys()
verwenden, um alle Schlüssel für einen bestimmten Wert zu erhalten und dann alle Elemente zu löschen.
Es sollte beachtet werden, dass unset()
die Indizes unberührt lässt, was bei der Verwendung von String-Indizes (Array als Hashtable) zu erwarten ist, aber bei ganzzahlig indizierten Arrays ziemlich überraschend sein kann:
$array = array(0, 1, 2, 3);
unset($array[2]);
var_dump($array);
/* array(3) {
[0]=>
int(0)
[1]=>
int(1)
[3]=>
int(3)
} */
$array = array(0, 1, 2, 3);
array_splice($array, 2, 1);
var_dump($array);
/* array(3) {
[0]=>
int(0)
[1]=>
int(1)
[2]=>
int(3)
} */
Daher kann array_splice()
verwendet werden, wenn Sie Ihre Integer-Schlüssel normalisieren möchten. Eine andere Möglichkeit ist die Verwendung von array_values()
nach unset()
:
$array = array(0, 1, 2, 3);
unset($array[2]);
$array = array_values($array);
var_dump($array);
/* array(3) {
[0]=>
int(0)
[1]=>
int(1)
[2]=>
int(3)
} */