Wie entferne ich ein Element aus einem Array, wenn ich den Elementnamen kenne? beispielsweise:
Ich habe ein Array:
$array = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi');
Der Benutzer tritt ein strawberry
strawberry
ist entfernt.
Um es vollständig zu erklären:
Ich habe eine Datenbank, in der eine durch Komma getrennte Liste von Elementen gespeichert ist. Der Code ruft die Liste basierend auf einer Benutzerauswahl auf, in der sich diese Auswahl befindet. Wenn sie also Erdbeere wählen, zieht sie den Code in jeden Eintrag, in dem sich Erdbeere befindet, und konvertiert diesen mit split () in ein Array. Ich möchte, dass sie die vom Benutzer ausgewählten Elemente, für dieses Beispiel Erdbeere, aus dem Array entfernen.
Antworten:
Verwenden Sie
array_search
, um den Schlüssel zu erhalten und ihn zu entfernen,unset
falls gefunden:array_search
Gibt false zurück ( null bis PHP 4.2.0), wenn kein Element gefunden wurde.Und wenn es mehrere Elemente mit demselben Wert geben kann, können
array_keys
Sie die Schlüssel für alle Elemente abrufen:quelle
$submenuArray
? (Beachten Sie, dass mit jeder Schleife$submenuArray
überschrieben wird.)Verwendung
array_diff()
für 1-Linien-Lösung:... Keine zusätzlichen Funktionen oder foreach-Schleife erforderlich.
quelle
strawberry
es sich nicht im ursprünglichen Array befindet, wird es im$array_without_strawberries
Array verfügbar - gefährlicher Code, wenn Sie sicherstellen möchten, dass sich ein bestimmtes Element nicht in einem Array befindet.$a = array_diff(array(), array('strawberry'));
- $ a ist ein leeres Array.quelle
$my_array = array_values($my_array);
.in_array
undarray_search
). Die Rückgabe vonarray_search
wie in Gumbos Antwort ist effektiverWenn Sie hier ein einfaches Array verwenden (was der Fall zu sein scheint), sollten Sie stattdessen diesen Code verwenden:
unset($array[$key])
Entfernt nur das Element, ordnet das einfache Array jedoch nicht neu an.Angenommen, wir haben ein Array und verwenden array_splice:
Im Vergleich zu nicht gesetzt:
Beachten Sie, wie
unset($array[$key])
das Array nicht neu angeordnet wird.quelle
unset
gibt nichts zurück. Sojson_encode(unset($array[2]))
ist für einen Vergleich nicht sachgemäßer.Sie können den Array-Filter verwenden, um die Elemente nach einer bestimmten Bedingung zu entfernen
$v
:quelle
array_filter()
. Während ich persönlich eine anonyme Funktion in meiner Implementierung verwenden würde, glaube ich, dass die richtige Aktion für SO darin besteht, die Antwort von D.Martin zu kommentieren oder zu bearbeiten, wenn Sie eine Mikroverbesserung vornehmen möchten, damit diese Seite nicht aufgebläht wird. Bitte löschen Sie diese doppelte Antwort.Wird so sein:
quelle
Dies ist eine einfache Wiederholung, mit der mehrere Werte im Array gelöscht werden können.
quelle
array_diff()
. Wie kam es zu drei positiven Stimmen? Niemand sollte diese Antwort hilfreich finden oder in eigenen Projekten verwenden. Ich empfehle, diese Antwort zu löschen. Dies würde dazu dienen, Ihr Konto von einer Antwort von geringer Qualität zu befreien, das Aufblähen der Antworten auf dieser Seite zu verringern und Ihnen ein diszipliniertes Abzeichen zu verdienen. Ich werde meine Ablehnung verschieben, damit Sie Zeit haben, sie für eine Belohnung zu löschen.Nur du kannst eine einzelne Zeile machen. Es wird ein Element aus dem Array entfernen
quelle
Ich benutze derzeit diese Funktion:
Sie können ein Array oder nur eine Zeichenfolge mit den Elementen eingeben, die entfernt werden sollen. Schreiben Sie es so:
ODER
$detils = array_delete('orange', $detils);
Es wird es auch neu indizieren.
quelle
Diese Frage hat mehrere Antworten, aber ich möchte noch etwas hinzufügen, weil ich bei der Verwendung
unset
oderarray_diff
beim Spielen mehrerer Indizes Probleme mit den Indizes des neuen Arrays hatte, als das bestimmte Element entfernt wurde (weil der ursprüngliche Index gespeichert wurde).Ich komme auf das Beispiel zurück:
oder
Wenn Sie das Ergebnis drucken, erhalten Sie:
Ergebnis:
Die Indizes werden jedoch gespeichert, sodass Sie wie folgt auf Ihr Element zugreifen können:
Daher wird das endgültige Array nicht neu indiziert. Sie müssen also nach dem
unset
oder hinzufügenarray_diff
:Danach hat Ihr Array einen normalen Index:
Bezogen auf diesen Beitrag: Array neu indizieren
Hoffe es wird helfen
quelle
Ein besserer Ansatz wäre möglicherweise, Ihre Werte als Schlüssel in einem assoziativen Array beizubehalten und sie dann aufzurufen
array_keys()
, wenn Sie ein tatsächliches Array erstellen möchten. Auf diese Weise müssen Sie nicht verwendenarray_search
, um Ihr Element zu finden.quelle
Die Antwort auf das Löschen des PHP-Arrays nach Wert (nicht nach Schlüssel) Wird von https://stackoverflow.com/users/924109/rok-kralj angegeben
IMO ist die beste Antwort, da es entfernt und nicht mutiert
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. Aus diesem Grund könnte es etwas langsamer sein.
quelle
Ich suchte nach der Antwort auf dieselbe Frage und stieß auf dieses Thema. Ich sehe zwei Hauptwege: die Kombination von
array_search
&unset
und die Verwendung vonarray_diff
. Auf den ersten Blick schien mir die erste Methode schneller zu sein, da kein zusätzliches Array erstellt werden muss (wie bei der Verwendungarray_diff
). Aber ich habe einen kleinen Benchmark geschrieben und sichergestellt, dass die zweite Methode nicht nur präziser, sondern auch schneller ist! Freut mich, dies mit Ihnen zu teilen. :) :)https://glot.io/snippets/f6ow6biaol
quelle
Ich würde es vorziehen, array_key_exists zu verwenden, um nach Schlüsseln in Arrays zu suchen, wie:
Array([0]=>'A',[1]=>'B',['key'=>'value'])
um das angegebene effektiv zu finden, da array_search und in_array () hier nicht funktionieren. Und entfernen Sie Dinge mit unset () .
Ich denke, es wird jemandem helfen.
quelle
Erstellen Sie ein numerisches Array mit dem Löschen eines bestimmten Array-Werts
Sie können diesen Link verweisen ..
quelle
quelle
Verwenden
array_seach()
Sie die folgenden: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 "Falsey" -Wert zurückgeben (Ihr Schlüssel kann0
beispielsweise sein), weshalb der strenge 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
quelle
array_search()
-unset()
Methode wurde bereits Jahre vor Ihrer von John Conde veröffentlicht. Doppelte Antworten haben für den Leser keinen Wert und sind aufgrund der Zeitverschwendung beim Scrollen und Lesen redundanter Informationen eine Unannehmlichkeit. Bitte löschen Sie diese Antwort.quelle
quelle
quelle