Löschen eines Elements aus einem Array in PHP

Lesezeit: 9 Minuten

Loschen eines Elements aus einem Array in PHP
Ben

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

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

  • Ich würde nicht sagen, dass Konrad die einfachste Antwort auf das genannte Problem ist. Mit unset() Die Iterationen über das Array enthalten den entfernten Wert nicht mehr. OTOH, es ist wahr, dass die Antwort von Stevan umfangreich ist und eigentlich die Antwort war, nach der ich gesucht habe – aber nicht das OP 🙂

    – brandizzi

    26. Juli 2012 um 17:05 Uhr

  • @danip Leicht im Handbuch zu finden, schließt eine Frage zu StackOverflow nicht aus. Wäre die Frage a Duplikat StackOverflow-Frage, dann gehört es vielleicht nicht hierher. StackOverflow ist ein guter Ort, um Antworten als Einstiegsoption zu finden, noch bevor Sie in das Handbuch geschaut haben.

    – Dan Nissenbaum

    11. Februar 2014 um 5:18 Uhr


  • @unset($array[$key]); $array = array_values($array);

    – Trojaner

    4. September 2014 um 12:55 Uhr

  • Wenn Sie Schlüssel aus einem Array von Arrays (assoziatives Array) entfernen möchten, sehen Sie sich die Lösung unter stackoverflow.com/a/47978980/1045444 an

    – Somnath Muluk

    26. Dezember 2017 um 13:10 Uhr

  • Sie können dies in einer Foreach-Schleife wie folgt tun: pastefs.com/pid/130950

    – Aurangzeb

    25. Juni 2019 um 10:50 Uhr


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 verwenden unset() oder alternativ \array_splice().

Wenn Sie den Wert kennen und den Schlüssel zum Löschen des Elements nicht kennen, können Sie es verwenden \array_search() um den Schlüssel zu bekommen. Dies funktioniert nur, wenn das Element nicht mehr als einmal vorkommt, da \array_search gibt nur den ersten Treffer zurück.

unset()

Beachten Sie dies bei der Verwendung unset() Die Array-Schlüssel ändern sich nicht. Wenn Sie die Schlüssel neu indizieren möchten, können Sie verwenden \array_values() nach dem unset()wodurch alle Schlüssel in numerisch aufgezählte Schlüssel konvertiert werden, beginnend bei 0.

Code:

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

Ausgabe:

[
    [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()wodurch alle Tasten in numerische Tasten umgewandelt werden.

\array_splice() braucht die versetztnicht der Schlüsselals zweiter 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 Sie das Array als Referenz. Die Rückgabewerte dieser Funktionen weisen Sie dem Array nicht zurück.

Löschen mehrerer Array-Elemente

Wenn Sie mehrere Array-Elemente löschen und nicht aufrufen möchten unset() oder \array_splice() Sie können die Funktionen mehrfach verwenden \array_diff() oder \array_diff_key() je nachdem, 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 verwenden \array_diff(). Wie zuvor mit unset() Die Schlüssel des Arrays werden 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() Methode

Wenn Sie die Schlüssel der Elemente kennen, die Sie löschen möchten, dann möchten Sie sie verwenden \array_diff_key(). Sie müssen sicherstellen, 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 verwenden möchten unset() oder \array_splice() um mehrere Elemente mit demselben Wert zu löschen, können Sie verwenden \array_keys() um alle Schlüssel für einen bestimmten Wert zu erhalten und dann alle Elemente zu löschen.

  • @AlexandruRada Nein, du hast gesagt „benutze das nicht“ – und das ist nur Unsinn. Sie können diese Methode sicher verwenden, wenn Sie ein Array als das behandeln, was es ist – ein Wörterbuch. Nur wenn Sie aufeinanderfolgende numerische Indizes erwarten, müssen Sie etwas anderes verwenden.

    – Konrad Rudolf

    13. Juni 2012 um 12:26 Uhr

  • @AlexandruRada Das kannst du auf keinen Fall haben array (3) { [0]=>int(0) ... wenn du unset($x[2]) von $x = array(1, 2, 3, 4); Ergebnis Muss sein var_dump($x); // array(3) { [0]=> int(1) [1]=> int(2) [3]=> int(4) } (war wahrscheinlich ein Tippfehler)

    – inemanja

    19. April 2016 um 5:33 Uhr


  • unset kann mehrere Argumente haben: void unset ( mixed $var [, mixed $... ] ).

    – Константин Ван

    14. April 2017 um 3:12 Uhr

  • array_filter ist auch eine praktikable Methode. Besonders gut, wenn Sie das Array nicht mutieren möchten, aber es wird auch nicht neu indiziert, was ein Problem mit json_encode sein kann. php.net/manual/en/function.json-encode.php#94157

    – dotnetZimmermann

    6. Mai 2017 um 0:20 Uhr

  • unset ist keine Funktion, sondern ein Sprachkonstrukt (und ein Schlüsselwort). Es darf und kann nicht mit “ vorangestellt werden

    – hvertös

    3. Dezember 2019 um 14:19 Uhr

1647062652 765 Loschen eines Elements aus einem Array in PHP
Stefan Gehrig

Es sollte erwähnt werden, dass unset() lässt Indizes unverändert, was Sie erwarten würden, wenn Sie String-Indizes (Array als Hashtable) verwenden, aber bei der Arbeit mit ganzzahligen indizierten Arrays ziemlich überraschend sein können:

$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 Integer-Schlüssel normalisieren möchten. Eine weitere Option ist die Verwendung array_values() nach dem 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)
} */

  • Es ist erwähnenswert, dass Sie bei der Verwendung von array_splice() den OFFSET kennen müssen, nicht den Schlüssel, sondern den Offset (!) des Elements, das Sie entfernen möchten

    – Tom

    8. Juni 2012 um 21:57 Uhr

  • @Tom: Für ein reguläres Array (das kontinuierlich ganzzahlig indiziert ist) ist der Offset der Index. Das ist wo array_splice kann (unter anderem) Sinn machen.

    – Stefan Gehrig

    9. Juni 2012 um 12:18 Uhr

  • Ja natürlich, aber nur etwas, an das Sie sich erinnern sollten, wenn Sie das Array manipulieren, bevor Sie Splice verwenden

    – Tom

    9. Juni 2012 um 16:12 Uhr

  • Von nur einem einfachen Test zum Löschen einer Tonne von Elementen aus einem gigantischen Array scheint array_splice viel schneller und weniger speicherintensiv zu sein. Dies stimmt mit dem überein, was ich erwarten würde: array_values() scheint eine Kopie des Arrays zu erstellen, während array_splice an Ort und Stelle funktioniert.

    – Doug Kavendek

    1. Dezember 2014 um 17:01 Uhr

  • array_values ​​ist ein nützlicher Ansatz, wenn Sie Elemente in einer Schleife entfernen und möchten, dass die Indizes konsistent sind, sie aber nach der Schleife komprimieren möchten.

    – Rorrik

    2. Juni 2015 um 16:38 Uhr

1647062653 54 Loschen eines Elements aus einem Array in PHP
Marcel Cozma

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

Jetzt wird array_values() ein numerisches Array gut neu indizieren, aber es wird alle Schlüsselzeichenfolgen aus dem Array entfernen und sie durch Zahlen ersetzen. Wenn Sie die Schlüsselnamen (Strings) 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
)

  • $get_merged_values ​​= array_merge($daten[‘res’],$daten[‘check_res’]); wenn ich das drucke print_r($get_merged_values); es zeigt folgendes an. Reihe ( [0] => Anordnung ( [menu_code] => 2 [menu_name] => Pflanze [menu_order_no] => 1 ) [1] => Anordnung ( [menu_code] => 3 [menu_name] => Linie [menu_order_no] => 2 ) ) Aber ich muss die Werte von menu_code und menu_name mit $get_merged_values ​​bekommen[‘menu_code’] und $get_merged_values[‘menu_name’] bzw. statt $get_merged_values ​​zu verwenden[0][menu_code]$get_merged_values[0][menu_name]. Bitte helfen Sie mir, wie das geht?

    – Herzhacker

    20. September 2018 um 5:56 Uhr

  • Die Formulierung der Frage ist irreführend, wie sie formuliert ist. Dies funktioniert nicht, wenn Sie $arr löschen möchten[$i] in einer foreach-Schleife, wenn mehr als ein Element den gleichen Wert hat.

    – Jed Lynch

    13. Oktober 2020 um 14:38 Uhr

1647062654 621 Loschen eines Elements aus einem Array in PHP
liamvictor

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

unset($array[$index]);

Loschen eines Elements aus einem Array in PHP
Robin Nixon

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

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

Zum Beispiel:

$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() verifiziert werden kann, die eine Größe von 4 für das anfängliche Array und 3 nach dem Entfernen melden.

1647062655 425 Loschen eines Elements aus einem Array in PHP
Mohammed

Auch für ein benanntes Element:

unset($array["elementName"]);

  • $a = array("A"=>1, "B"=>2, "C"=>"a"); print_r($a); unset($a["B"]); print_r($a); ergibt (formatiert): Array ( [A] => 1 [B] => 2 [C] => a ), Array ( [A] => 1 [C] => a )

    – Tag des Fenstersturzes

    9. Juni 2011 um 1:50 Uhr


  • Es scheint, dass Sie Array-Elemente, die durch eine Zeichenfolge indiziert sind, nicht zurücksetzen können (erzeugt “Fatal error: Cannot unset string offsets”). Ich glaube nicht, dass dies immer der Fall war, aber sicherlich ab PHP 5.3.10 und wahrscheinlich früher

    – Karpien

    6. April 2012 um 0:29 Uhr


  • @carpii PHP kann Elemente aus einem assoziativen Array zurücksetzen. Der schwerwiegende Fehler wird verursacht, wenn Sie versuchen, unset($var[‘key’]) auf einem String statt einem Array Beispiel: $array = array( ‘test’ => ‘value’, ‘another’ => ‘value’, ); unset($array[‘test’]); // Entfernt das “test”-Element wie erwartet aus dem Array $array = ‘test’; unset($array[‘test’]); // Löst wie erwartet “Fatal error: Cannot unset string offsets” aus

    – Jimbo

    20. März 2013 um 9:56 Uhr


  • Hier müssen Sie den Schlüsselnamen kennen, besser: stackoverflow.com/a/52826684/1407491

    – Nabi KAZ

    16. Oktober 2018 um 1:23 Uhr

  • @Eran bereits empfohlen unset() zurück im Jahr 2008! Wenn Sie diesen Rat verbessern wollten, hätten Sie diese Antwort bearbeiten sollen. Auf dieser Seite mit mehreren Registerkarten gibt es viel zu viele redundante Inhalte!

    – mickmackusa

    23. August 2021 um 0:22 Uhr


992780cookie-checkLöschen eines Elements aus einem Array in PHP

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy