Ich möchte ein Array mit durchlaufen foreach
, um zu überprüfen, ob ein Wert vorhanden ist. Wenn der Wert vorhanden ist, möchte ich das Element löschen, das ihn enthält.
Ich habe folgenden Code:
foreach($display_related_tags as $tag_name) {
if($tag_name == $found_tag['name']) {
// Delete element
}
}
Ich weiß nicht, wie ich das Element löschen soll, sobald der Wert gefunden wurde. Wie lösche ich es?
Ich muss foreach
für dieses Problem verwenden. Es gibt wahrscheinlich Alternativen zu foreach
, und Sie können sie gerne teilen.
$key => &$tag_name
stackoverflow.com/a/2008893/922522json_encode()
. Sie können dies mit$display_related_tags = array_values ($display_related_tags);
nach derforeach
Schleife lösen .$projects = array_filter($projects, function ($project) { return count($project->roles) > 0; });
konvertiert das Ergebnis in ein Objekt.Eine bessere Lösung ist die Verwendung der
array_filter
Funktion:Wie die PHP- Dokumentation lautet:
quelle
ARRAY_FILTER_USE_KEY - pass key as the only argument to callback instead of the value ARRAY_FILTER_USE_BOTH - pass both value and key as arguments to callback instead of the value
Default is 0 which will pass value as the only argument to callback instead.
Das heißt, das erneute Lesen der Antwort in diesem Fall wäre natürlich nicht wichtig, wie Sie behaupten.display_related_tags = array_values(display_related_tags);
.quelle
Anstatt eine foreach () - Schleife für das Array auszuführen, wäre es schneller, array_search () zu verwenden, um den richtigen Schlüssel zu finden. Bei kleinen Arrays würde ich foreach verwenden, um die Lesbarkeit zu verbessern. Bei größeren Arrays oder häufig ausgeführtem Code sollte dies jedoch etwas optimaler sein:
Der strikte Vergleichsoperator! == wird benötigt, da array_search () 0 als Index für den $ unerwünschten Wert zurückgeben kann.
Im obigen Beispiel wird auch nur der erste Wert $ unwantedValue entfernt. Wenn der $ unwantedValue mehr als einmal im $ -Array auftreten kann, sollten Sie array_keys () verwenden, um alle zu finden:
Weitere Informationen finden Sie unter http://php.net/manual/en/function.array-search.php .
quelle
Wenn Sie ein Szenario haben, in dem Sie mehr als einen Wert aus dem foreach-Array entfernen müssen, müssen Sie in diesem Fall jeweils einen Wert als Referenz übergeben: Ich versuche, dieses Szenario zu erklären:
In der zweiten Schleife möchten Sie die Einträge für die ersten Schleifen deaktivieren. Sie werden aus Leistungsgründen nicht erneut in der Iteration angezeigt oder dann auch nicht aus dem Speicher entfernt, da sie im Speicher vorhanden sind und in Iterationen angezeigt werden.
quelle
Es gibt bereits Antworten, die Aufschluss darüber geben, wie das Deaktivieren erfolgen kann. Anstatt Code in all Ihren Klassen zu wiederholen, funktionieren Sie wie folgt und verwenden Sie ihn bei Bedarf im Code. In der Geschäftslogik möchten Sie manchmal einige Eigenschaften nicht verfügbar machen. Bitte sehen Sie unten einen Liner-Aufruf zum Entfernen
Rufen Sie an wie:
quelle
Wie bereits erwähnt, möchten Sie einen Foreach mit dem Schlüssel durchführen und die Verwendung des Schlüssels deaktivieren. Beachten Sie jedoch, dass das Mutieren eines Arrays während der Iteration im Allgemeinen eine schlechte Idee ist, obwohl ich mir bezüglich der PHP-Regeln nicht sicher bin spontan.
quelle
foreach
oderfor
Konstruktionen anstelle von Iteration im Allgemeinen sein?