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