Ich habe ein PHP-Array wie folgt:
$messages = [312, 401, 1599, 3, ...];
Ich möchte das Element löschen, das den Wert enthält $del_val
(zum Beispiel $del_val=401
), aber ich kenne seinen Schlüssel nicht. Dies könnte helfen: Jeder Wert kann nur einmal vorhanden sein .
Ich suche nach der einfachsten Funktion, um diese Aufgabe auszuführen.
Antworten:
Mit
array_search()
undunset
, versuchen Sie Folgendes:array_search()
Gibt den Schlüssel des gefundenen Elements zurück, mit dem dieses Element mithilfe von aus dem ursprünglichen Array entfernt werden kannunset()
. Es wirdFALSE
bei einem Fehler zurückgegeben, kann jedoch bei Erfolg einen Falsch-Y-Wert zurückgeben (Ihr Schlüssel kann0
beispielsweise sein), weshalb der strikte Vergleichsoperator!==
verwendet wird.Die
if()
Anweisung prüft, obarray_search()
ein Wert zurückgegeben wurde, und führt nur dann eine Aktion aus, wenn dies der Fall ist.quelle
array_diff()
langsamer sein würde , wie es zwei Vergleichen Arrays, einfach nicht durch die Suche ein wiearray_search()
.$key
ist0
?0
gesuchte Wert einen Schlüssel oder einen anderen Falsey-Wert hat, wird der Wert nicht deaktiviert und Ihr Code funktioniert nicht. Sie sollten testen$key === false
. (edit- du hast es)Nun, das Löschen eines Elements aus einem Array ist im Grunde nur ein Unterschied zwischen einem Element.
Es verallgemeinert sich gut, Sie können so viele Elemente gleichzeitig entfernen, wie Sie möchten, wenn Sie möchten.
Haftungsausschluss: Beachten Sie, dass meine Lösung eine neue Kopie des Arrays erstellt, während die alte intakt bleibt, im Gegensatz zu der akzeptierten Antwort, die mutiert. Wählen Sie die aus, die Sie benötigen.
quelle
[$element]
ich gesagt habe , ich habearray($element)
stattdessen verwendet. Kein Problem, aber ich wollte nur, dass jeder, der ein ähnliches Problem hatte, weiß, dass er nicht allein istarray_diff
Verwendungen(string) $elem1 === (string) $elem2
als Gleichheitsbedingung, nicht$elem1 === $elem2
wie man erwarten könnte. Das von @ nischayn22 aufgezeigte Problem ist eine Folge davon. Wenn Sie möchten, dass etwas als Dienstprogrammfunktion für Arrays beliebiger Elemente (bei denen es sich möglicherweise um Objekte handelt) verwendet wird, ist die Antwort von Bojangle aus diesem Grund möglicherweise besser.array_diff()
und somit die Laufzeit von O (n) auf O (n lg n) anstößt.Ein interessanter Weg ist die Verwendung von
array_keys()
:Die
array_keys()
Funktion benötigt zwei zusätzliche Parameter, um nur Schlüssel für einen bestimmten Wert zurückzugeben und um festzustellen, ob eine strikte Überprüfung erforderlich ist (dh === zum Vergleich verwenden).Dies kann auch mehrere Array-Elemente mit demselben Wert entfernen (z
[1, 2, 3, 3, 4]
. B. ).quelle
array_values()
; Die restlichen Schlüssel befinden sich jedoch immer noch in derselben Reihenfolge, so dass sie technisch gesehen nicht "unsortiert" sindWenn Sie sicher wissen, dass Ihr Array nur ein Element mit diesem Wert enthält, können Sie dies tun
Wenn Ihr Wert jedoch möglicherweise mehrmals in Ihrem Array vorkommt, können Sie dies tun
Hinweis: Die zweite Option funktioniert nur für PHP5.3 + mit Closures
quelle
quelle
Schauen Sie sich folgenden Code an:
Du kannst tun:
Und das bringt dir dieses Array:
quelle
Der beste Weg ist
array_splice
Grund für das Beste finden Sie hier unter http://www.programmerinterview.com/index.php/php-questions/how-to-delete-an-element-from-an-array-in-php/
quelle
[1, 2, 4 => 3]
.3
, wird das Array sein[1, 2, 3]
; Mit anderen Worten, der Wert wurde nicht entfernt. Um es klar zu sagen, ich sage nicht, dass es in allen Szenarien fehlschlägt, nur in diesem.Oder einfach manuell:
Dies ist die sicherste davon, da Sie die volle Kontrolle über Ihr Array haben
quelle
array_splice()
anstelle von verwenden,unset()
werden auch die Array-Indizes neu angeordnet, was in diesem Fall besser sein könnte.Mit dem folgenden Code werden die sich wiederholenden Werte aus den $ -Nachrichten entfernt.
$messages = array_diff($messages, array(401));
quelle
Wenn Sie PHP haben
5.3+
, gibt es den einzeiligen Code:quelle
$value
, also muss er wirklich in eine$value
Ausgabe
Array ( [0] => 312 [1] => 1599 [2] => 3 )
quelle
du kannst tun:
Erläuterung : Löschen Sie das Element mit dem Schlüssel
401
nach dem Umdrehen des Arrays.quelle
401
?Um mehrere Werte zu löschen, versuchen Sie Folgendes:
quelle
Leihte sich die Logik von Unterstrich.JS _.reject und erstellte zwei Funktionen (Leute bevorzugen Funktionen !!)
array_reject_value: Diese Funktion lehnt einfach den angegebenen Wert ab (funktioniert auch für PHP4,5,7).
array_reject: Diese Funktion lehnt einfach die aufrufbare Methode ab (funktioniert für PHP> = 5.3).
In unserem aktuellen Beispiel können wir die obigen Funktionen wie folgt verwenden:
oder noch besser: (da dies uns eine bessere Syntax gibt, die wir wie die von array_filter verwenden können )
Das Obige kann für kompliziertere Dinge verwendet werden, wie zum Beispiel, wenn wir alle Werte entfernen möchten, die größer oder gleich 401 sind. Wir könnten dies einfach tun:
quelle
Versuchen Sie Folgendes: Dies ist der beste und schnellste Weg, um Elemente nach Wert zu entfernen
quelle
@ Bojangles Antwort hat mir geholfen. Vielen Dank.
In meinem Fall kann das Array assoziativ sein oder nicht, daher habe ich die folgende Funktion hinzugefügt
Grüße
quelle
Einzeiliger Code (dank array_diff () ), verwenden Sie Folgendes:
quelle
Die akzeptierte Antwort konvertiert das Array in ein assoziatives Array. Wenn Sie es also als nicht assoziatives Array mit der akzeptierten Antwort beibehalten möchten, müssen Sie es möglicherweise auch verwenden
array_values
.Die Referenz ist hier
quelle
Gemäß Ihrer Anforderung " Jeder Wert kann nur einmal vorhanden sein ", wenn Sie nur daran interessiert sind, eindeutige Werte in Ihrem Array beizubehalten, ist dies
array_unique()
möglicherweise das, wonach Sie suchen.Eingang:
Ergebnis:
quelle
Wenn sich Werte, die Sie löschen möchten, in einem Array befinden oder befinden können. Verwenden Sie die Funktion array_diff . Scheint für solche Dinge großartig zu funktionieren.
array_diff
quelle
Ich weiß, dass dies überhaupt nicht effizient ist, aber einfach, intuitiv und leicht zu lesen ist.
Wenn also jemand nach einer nicht so ausgefallenen Lösung sucht, die erweitert werden kann, um mit mehr Werten oder spezifischeren Bedingungen zu arbeiten, dann ist hier ein einfacher Code:
quelle
Holen Sie sich den Array-Schlüssel mit
array_search()
.quelle
Wenn Sie den Schlüssel nicht kennen, bedeutet dies, dass es keine Rolle spielt.
Sie können den Wert als Schlüssel eingeben. Dies bedeutet, dass der Wert sofort gefunden wird. Besser als die Suche in allen Elementen immer und immer wieder zu verwenden.
quelle
Ein Einzeiler mit dem
or
Operator:quelle
Sie können auf diese URL verweisen : für die Funktion
Dann sollte die Ausgabe sein,
quelle
Eine andere Idee, um den Wert eines Arrays zu löschen, ist array_diff. Wenn ich will
(Doc: http://php.net/manual/fr/function.array-diff.php )
quelle
Ich denke, der einfachste Weg wäre, eine Funktion mit einer foreach-Schleife zu verwenden:
Ausgabe wird sein:
quelle
Mit PHP 7.4 mit Pfeilfunktionen:
Um es als nicht assoziatives Array beizubehalten, umschließen Sie es mit
array_values()
:quelle