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

2voto

Jed Lynch Punkte 1685

Ich bin hierher gekommen, weil ich sehen wollte, ob es eine elegantere Lösung für dieses Problem gibt als die Verwendung von unset($arr[$i]). Zu meiner Enttäuschung sind diese Antworten entweder falsch oder decken nicht jeden Grenzfall ab.

Hier ist der Grund, warum array_diff() nicht funktioniert. Die Schlüssel sind im Array eindeutig, während die Elemente nicht immer eindeutig sind.

$arr = [1,2,2,3];

foreach($arr as $i => $n){
    $b = array_diff($arr,[$n]);
    echo "\n".json_encode($b);
}

Ergebnisse...

[2,2,3]
[1,3]
[1,2,2] 

Wenn zwei Elemente identisch sind, werden sie entfernt. Dies gilt auch für array_search() und array_flip().

Ich habe viele Antworten mit array_slice() und array_splice() gesehen, aber diese Funktionen funktionieren nur mit numerischen Arrays. Alle Antworten, die ich kenne, wenn hier nicht die Frage beantworten, und so ist hier eine Lösung, die funktionieren wird.

$arr = [1,2,3];

foreach($arr as $i => $n){
    $b = array_merge(array_slice($arr,0,$i),array_slice($arr,$i+1));
    echo "\n".json_encode($b);
}

Results...

[2,3];
[1,3];
[1,2];

Da unset($arr[$i]) sowohl bei assoziativen Arrays als auch bei numerischen Arrays funktioniert, ist die Frage damit noch nicht beantwortet.

Diese Lösung besteht darin, die Schlüssel zu vergleichen und mit einem Werkzeug, das sowohl numerische als auch assoziative Arrays verarbeiten kann. Ich verwende dafür array_diff_uassoc(). Diese Funktion vergleicht die Schlüssel in einer Rückruffunktion.

$arr = [1,2,2,3];
//$arr = ['a'=>'z','b'=>'y','c'=>'x','d'=>'w'];
foreach($arr as $key => $n){
    $b = array_diff_uassoc($arr, [$key=>$n], function($a,$b) {
        if($a != $b){
            return 1;
        }
    });
    echo "\n".json_encode($b);
}    

Ergebnisse.....

[2,2,3];
[1,2,3];
[1,2,2];

['b'=>'y','c'=>'x','d'=>'w'];
['a'=>'z','c'=>'x','d'=>'w'];
['a'=>'z','b'=>'y','d'=>'w'];
['a'=>'z','b'=>'y','c'=>'x'];

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