3065 Stimmen

Löschen eines Elements aus einem Array in PHP

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.

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);

3591voto

Konrad Rudolph Punkte 503837

Es gibt verschiedene Möglichkeiten, ein Array-Element zu löschen, wobei einige für bestimmte Aufgaben nützlicher sind als andere.

Löschen eines einzelnen Array-Elements

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éthode

Wenn 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.

Löschen mehrerer Array-Elemente

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éthode

Wenn 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éthode

Wenn 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éthode

Wenn 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
]

1424voto

Stefan Gehrig Punkte 80686

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)
} */

428voto

Marcel Cozma Punkte 4229
  // 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
)

242voto

liamvictor Punkte 3161
$key = array_search($needle, $array);
if ($key !== false) {
    unset($array[$key]);
}

109voto

Eran Galperin Punkte 84916
unset($array[$index]);

CodeJaeger.com

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.

Powered by:

X