Ich habe mich gefragt, ob es möglich ist, das aktuelle Objekt zu bearbeiten, das in einer foreach
Schleife verarbeitet wird
Ich arbeite mit einer Reihe von Objekten $questions
und möchte in meiner Datenbank nach den Antworten suchen, die mit diesem Frageobjekt verknüpft sind. Holen Sie sich also für jede Frage die Antwortobjekte und aktualisieren Sie den Strom $question
in meiner foreach
Schleife, damit ich ihn an anderer Stelle ausgeben / verarbeiten kann.
foreach($questions as $question){
$question['answers'] = $answers_model->get_answers_by_question_id($question['question_id']);
}
Antworten:
Es gibt zwei Möglichkeiten, dies zu tun
Auf diese Weise können Sie den Schlüssel speichern, so dass Sie es wieder in der Haupt aktualisieren können
$questions
variableoder
Durch Hinzufügen von
&
wird das$questions
Update aktualisiert. Aber ich würde sagen, der erste wird empfohlen, obwohl dieser kürzer ist (siehe Kommentar von Paystey)Gemäß der PHP-
foreach
Dokumentation :quelle
foreach
wird wirklich nicht empfohlen, da die Art und Weise, wie derforeach
Wertteil der Schleife umgangen wird, zu einem unvorhersehbaren Verhalten führt. Es kann länger dauern, aber Sie sind hier mit Methode 1 weitaus sicherer.foreach
Bezug auf Horror wie diesen: stackoverflow.com/questions/3307409/… (@Nico, FYI auch.)Sicherlich ist die
array_map
Verwendung eines Containers, derArrayAccess
zum Ableiten von Objekten implementiert wird, nur eine intelligentere, semantische Methode, um dies zu erreichen.Die Array-Map-Semantik ist in den meisten Sprachen und Implementierungen, die ich gesehen habe, ähnlich. Es wurde entwickelt, um ein modifiziertes Array basierend auf dem Eingabe-Array-Element zurückzugeben (hohe Ebene ohne Berücksichtigung der Sprachkompilierungs- / Laufzeittyp-Einstellungen). Eine Schleife soll mehr Logik ausführen.
Zum Abrufen von Objekten nach ID / PK würde ich, je nachdem, ob Sie SQL verwenden oder nicht (es wird empfohlen), einen Filter verwenden, um sicherzustellen, dass ich ein Array gültiger PKs erhalte, dann mit Komma implodieren und in eine SQL-
IN()
Klausel einfügen Geben Sie die Ergebnismenge zurück. Es wird ein Aufruf anstelle mehrerer über SQL ausgeführt, wodurch ein Teil descall->wait
Zyklus optimiert wird. Am wichtigsten ist, dass mein Code für jemanden aus jeder Sprache mit einem gewissen Grad an Kompetenz gut lesbar ist und wir nicht auf Veränderlichkeitsprobleme stoßen.vs.
Wenn Sie wissen, was Sie tun, werden Sie niemals Probleme mit der Veränderlichkeit haben (wenn Sie beabsichtigen, diese zu überschreiben, können
$arr
Sie dies immer$arr = array_map
und explizit tun .quelle