Frage PHP: Lösche ein Element aus einem Array


Gibt es eine einfache Möglichkeit, ein Element aus einem Array mit zu löschen? PHP, so dass foreach ($array) enthält dieses Element nicht mehr?

Ich dachte, dass ich es einstellen sollte null würde es tun, aber anscheinend funktioniert es nicht.


1968
2017-12-15 20:28


Ursprung


Antworten:


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

Löschen Sie ein Array-Element

Wenn Sie nur ein Array-Element löschen möchten, das Sie verwenden können unset() oder Alternative array_splice().

Auch wenn Sie den Wert haben und den Schlüssel nicht kennen, um das Element zu löschen, das Sie verwenden können array_search() um den Schlüssel zu bekommen.

unset() Methode

Beachten Sie, dass wenn Sie verwenden unset() Die Array-Schlüssel werden nicht geändert / neu indiziert. Wenn Sie die Schlüssel neu indizieren möchten, die Sie verwenden können array_values() nach unset() welche alle Schlüssel in nummerierte Aufzählungsschlüssel umwandelt, beginnend bei 0.

Code

<?php

    $array = array(0 => "a", 1 => "b", 2 => "c");
    unset($array[1]);
               //↑ Key which you want to delete

?>

Ausgabe

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

array_splice() Methode

Wenn du benutzt array_splice() Die Schlüssel werden automatisch neu indiziert, aber die assoziativen Schlüssel ändern sich nicht im Gegensatz zu array_values() welches alle Schlüssel in numerische Schlüssel umwandelt.

Ebenfalls array_splice() braucht den Offset, nicht den Schlüssel! als zweiter Parameter.

Code

<?php

    $array = array(0 => "a", 1 => "b", 2 => "c");
    array_splice($array, 1, 1);
                       //↑ Offset which you want to delete

?>

Ausgabe

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

array_splice() gleich wie unset() Nehmen Sie das Array als Referenz, das bedeutet, dass Sie die Rückgabewerte dieser Funktionen nicht dem Array zuweisen möchten.

Löschen Sie mehrere Array-Elemente

Wenn Sie mehrere Array-Elemente löschen möchten und nicht anrufen möchten unset() oder array_splice() Mehrfach können Sie die Funktionen nutzen array_diff() oder array_diff_key() abhängig davon, ob Sie die Werte oder die Schlüssel der Elemente kennen, die Sie löschen möchten.

array_diff() Methode

Wenn Sie die Werte der Array-Elemente kennen, die Sie löschen möchten, können Sie sie verwenden array_diff(). Wie zuvor mit unset() Die Schlüssel des Arrays werden nicht geändert / neu indiziert.

Code

<?php

    $array = array(0 => "a", 1 => "b", 2 => "c");
    $array = array_diff($array, ["a", "c"]);
                              //└────────┘→ Array values which you want to delete

?>

Ausgabe

Array (
    [1] => b
)

array_diff_key() Methode

Wenn Sie die Schlüssel der Elemente kennen, die Sie löschen möchten, dann möchten Sie verwenden array_diff_key(). Hier müssen Sie sicherstellen, dass Sie die Schlüssel als Schlüssel im zweiten Parameter und nicht als Werte übergeben. Andernfalls müssen Sie das Array mit spiegeln array_flip(). Und auch hier werden sich die Schlüssel nicht ändern / reindexen.

Code

<?php

    $array = array(0 => "a", 1 => "b", 2 => "c");
    $array = array_diff_key($array, [0 => "xy", "2" => "xy"]);
                                   //↑           ↑ Array keys which you want to delete
?>

Ausgabe

Array (
    [1] => b
)

Auch wenn Sie verwenden möchten unset() oder array_splice() um mehrere Elemente mit demselben Wert zu löschen, den Sie verwenden können array_keys() um alle Schlüssel für einen bestimmten Wert zu erhalten und dann alle Elemente zu löschen.


2225
2017-12-15 21:25



Es ist darauf hinzuweisen, dass unset() Die Indizes bleiben unverändert, was bei der Verwendung von String-Indizes (Array als Hashtable) zu erwarten ist, kann aber im Umgang mit indexierten Integer-Arrays ziemlich überraschend sein:

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

Damit array_splice() kann verwendet werden, wenn Sie Ihre Ganzzahlschlüssel normalisieren möchten. Eine andere Möglichkeit ist die Verwendung 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)
} */

1299
2017-08-02 15:57



  // 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 schön neu indizieren, aber alle Schlüsselzeichenfolgen aus dem Array entfernen und durch Zahlen ersetzen. Wenn Sie die Schlüsselnamen (Zeichenfolgen) beibehalten oder das Array neu indizieren müssen, 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
)

320
2017-11-15 11:29



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

175
2017-12-15 20:31



unset($array[$index]);

58
2017-11-26 08:25



Wenn Sie ein numerisch indiziertes Array haben, in dem alle Werte eindeutig sind (oder sie sind nicht eindeutig, aber Sie möchten alle Instanzen eines bestimmten Werts entfernen), können Sie einfach array_diff () verwenden, um ein passendes Element zu entfernen:

$my_array = array_diff($my_array, array('Value_to_remove'));

Beispielsweise:

$my_array = array('Andy', 'Bertha', 'Charles', 'Diana');
echo sizeof($my_array) . "\n";
$my_array = array_diff($my_array, array('Charles'));
echo sizeof($my_array);

Dies zeigt Folgendes an:

4
3

In diesem Beispiel wird das Element mit dem Wert "Charles" entfernt, wie durch die Aufrufe von sizeof () bestätigt werden kann, die eine Größe von 4 für das anfängliche Array und 3 nach dem Entfernen angeben.


55
2017-07-31 01:06



Auch für ein benanntes Element:

unset($array["elementName"]);


48
2017-07-19 15:37