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 die Einstellung auf null
würde es tun, aber offenbar funktioniert es nicht.
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 die Einstellung auf null
würde es tun, aber offenbar funktioniert es 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 möchten, können Sie unset()
oder alternativ \array_splice()
.
Wenn Sie den Wert kennen und nicht wissen, mit welchem Schlüssel Sie das Element löschen können, können Sie \array_search()
um den Schlüssel zu erhalten. Dies funktioniert nur, wenn das Element nicht mehr als einmal vorkommt, da \array_search
gibt nur den ersten Treffer zurück.
unset()
Beachten Sie, dass Sie bei der Verwendung von unset()
ändern sich die Array-Schlüssel nicht. Wenn Sie die Schlüssel neu indizieren wollen, können Sie \array_values()
nach unset()
die alle Schlüssel in numerisch aufgezählte Schlüssel, beginnend mit 0, umwandelt.
Code:
$array = [0 => "a", 1 => "b", 2 => "c"];
unset($array[1]);
// Key which you want to delete
Ausgabe:
[
[0] => a
[2] => c
]
\array_splice()
méthodeWenn Sie \array_splice()
werden die Schlüssel automatisch neu indiziert, aber die assoziativen Schlüssel ändern sich nicht - im Gegensatz zu \array_values()
, die alle Tasten in Zifferntasten umwandelt.
\array_splice()
braucht die Versatz , nicht die Schlüssel als zweiten Parameter.
Code:
$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()
, gleich wie unset()
nehmen das Array per Referenz. Sie ordnen die Rückgabewerte dieser Funktionen nicht dem Array zu.
Wenn Sie mehrere Array-Elemente löschen wollen und nicht die unset()
o \array_splice()
mehrfach zu verwenden, können Sie die Funktionen \array_diff()
o \array_diff_key()
je nachdem, ob Sie die Werte oder die Schlüssel der Elemente kennen, die Sie löschen möchten.
\array_diff()
méthodeWenn Sie die Werte der Array-Elemente kennen, die Sie löschen möchten, können Sie mit \array_diff()
. Wie zuvor bei unset()
werden die Schlüssel des Arrays nicht geändert.
Code:
$array = [0 => "a", 1 => "b", 2 => "c", 3 => "c"];
$array = \array_diff($array, ["a", "c"]);
//
// Array values which you want to delete
Ausgabe:
[
[1] => b
]
\array_diff_key()
méthodeWenn Sie die Schlüssel der Elemente kennen, die Sie löschen wollen, dann verwenden Sie \array_diff_key()
. Sie müssen darauf achten, dass Sie die Schlüssel als Schlüssel im zweiten Parameter übergeben und nicht als Werte. Schlüssel werden nicht neu indiziert.
Code:
$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
]
Wenn Sie Folgendes verwenden möchten unset()
o \array_splice()
um mehrere Elemente mit demselben Wert zu löschen, können Sie \array_keys()
um alle Schlüssel für einen bestimmten Wert zu erhalten und dann alle Elemente zu löschen.
\array_filter()
méthodeWenn Sie alle Elemente mit einem bestimmten Wert im Array löschen möchten, können Sie \array_filter()
.
Code:
$array = [0 => "a", 1 => "b", 2 => "c"];
$array = \array_filter($array, static function ($element) {
return $element !== "b";
//
// Array value which you want to delete
});
Ausgabe:
[
[0] => a
[1] => c
]
Es ist zu beachten, dass unset()
behält die Indizes unverändert bei, was bei der Verwendung von String-Indizes (Array als Hashtable) zu erwarten ist, aber bei ganzzahligen 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)
} */
Also array_splice()
kann verwendet werden, wenn Sie Ihre Integer-Schlüssel normalisieren möchten. Eine weitere Option 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)
} */
// Our initial array
$arr = array("blue", "green", "red", "yellow", "green", "orange", "yellow", "indigo", "red");
print_r($arr);
// Remove the elements who's values are yellow or red
$arr = array_diff($arr, array("yellow", "red"));
print_r($arr);
Dies ist die Ausgabe des obigen Codes:
Array
(
[0] => blue
[1] => green
[2] => red
[3] => yellow
[4] => green
[5] => orange
[6] => yellow
[7] => indigo
[8] => red
)
Array
(
[0] => blue
[1] => green
[4] => green
[5] => orange
[7] => indigo
)
Nun wird array_values() ein numerisches Array neu indizieren, aber es wird alle Schlüsselstrings aus dem Array entfernen und durch Zahlen ersetzen. Wenn Sie die Schlüsselnamen (Strings) beibehalten oder das Array neu indizieren wollen, wenn alle Schlüssel numerisch sind, verwenden Sie array_merge():
$arr = array_merge(array_diff($arr, array("yellow", "red")));
print_r($arr);
Ausgänge
Array
(
[0] => blue
[1] => green
[2] => green
[3] => orange
[4] => indigo
)
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
17 Stimmen
Ich würde nicht sagen, dass Konrads Antwort die einfachste auf das genannte Problem ist. Mit
unset()
werden die Iterationen über das Array den entfernten Wert nicht mehr enthalten. OTOH, es ist wahr, dass Stevan Antwort ist reichlich und, tatsächlich, war die Antwort, die ich gesucht habe - aber nicht die OP :)48 Stimmen
@danip Dass es im Handbuch leicht zu finden ist, schließt eine Frage auf StackOverflow nicht aus. Wäre die Frage eine duplicado StackOverflow-Frage, dann gehört sie vielleicht nicht hierher. StackOverflow ist ein guter Ort, um Antworten zu finden, noch bevor Sie im Handbuch nachsehen.
7 Stimmen
@unset($array[$key]); $array = array_values($array);
0 Stimmen
Verwandte Frage über das Entfernen dieser in einer foreach-Schleife: stackoverflow.com/questions/1949259/
2 Stimmen
Wenn Sie Schlüssel aus einem Array eines Arrays (assoziatives Array) entfernen möchten, finden Sie die Lösung unter stackoverflow.com/a/47978980/1045444
2 Stimmen
Können Sie dies in einer foreach-Schleife wie folgt tun: pastefs.com/pid/130950
3 Stimmen
Das Setzen eines Array-Schlüsselwerts auf null bedeutet einfach, dass ein Schlüssel mit einem Nullwert enthalten ist. Der Schlüssel existiert weiterhin.
0 Stimmen
@Aurangzeb, der Code funktioniert einwandfrei (sollte eine Antwort sein und ich würde ihn wegen seiner Einfachheit hoch bewerten).