suchen
HeimBackend-EntwicklungPHP-TutorialWarum tritt das Problem der Ergebnisakkumulation bei der Verwendung von Rückruffunktionen in foreach -Schleifen auf? Wie löst ich es?

Warum tritt das Problem der Ergebnisakkumulation bei der Verwendung von Rückruffunktionen in foreach -Schleifen auf? Wie löst ich es?

Das kumulative Problem und die Lösung von Rückruffunktionen in foreach -Schleife

In diesem Artikel werden die kumulativen Ergebnisseprobleme erörtert, die bei der Verwendung von Rückruffunktionen in foreach -Schleifen auftreten können und entsprechende Lösungen bereitstellen.

Problembeschreibung

Wenn Sie foreach Schleife verwenden, um die Daten zu iterieren und die Rückruffunktion getchildareaid aufzurufen, um die Subregion-ID zu erhalten, wird festgestellt, dass die Ergebnisse akkumuliert werden. Der Code ist wie folgt:

 foreach ($ Towns als $ key => $ val) {
    $ as AreaIdarr = getChildareAid ($ val ['id']);
    $ result [$ val ['name']] = $ Worker :: WHERE ('Area_ID', 'in', $ aibleIdarr)-> count ();
}

Die Rückruffunktion getchildareaid ist wie folgt definiert:

 Funktion getChildaiid ($ id) {
    statische Fläche;
    $ Area = $ Area ?? Neue \ app \ Common \ Modell \ Area;
    $ result = collection ($ area-> wob
    static $ res = [];
    if ($ result) {
        foreach ($ ergeben als $ key => $ val) {
            $ res [] = $ val ['id'];
            getChildareaiid ($ val ['id']);
        }
    }
    Return $ res;
}

Das Problem ist, dass die getchildareaid -Funktion die statische Variable $res verwendet, wodurch sich jedes Mal, wenn sie aufgerufen wird, ansammelt, anstatt jedes Mal unabhängig zu berechnen.

Problemanalyse

static $res = []; deklariert eine statische Variable in der getchildareaid -Funktion. Statische Variablen werden nach Abschluss des Funktionsaufrufs nicht zerstört und ihre Werte werden in nachfolgenden Aufrufen beibehalten. Jedes Mal, wenn foreach -Schleifen getchildareaid ruft, sammelt $res neue Ergebnisse, was schließlich zu einem Fehler im Ergebnis führt.

Lösung

Um dieses Problem zu lösen und statische Variablen zu verwenden, können die folgenden zwei Methoden verwendet werden:

  1. Schreiben Sie die Funktion neu, verwenden Sie lokale Variablen: Erstellen Sie eine neue Funktion, anstatt die statische Variable $res zu verwenden, verwenden Sie jedoch lokale Variablen, um die Ergebnisse jedes Aufrufs zu speichern.

  2. Ändern Sie vorhandene Funktionen und eliminieren Sie statische Variablen: Ändern Sie die getchildareaid -Funktion, entfernen Sie statische Variable $res und geben Sie ein neues Array zurück, wenn Sie rekursiv aufgerufen werden, um die Akkumulation von Ergebnissen zu vermeiden. Die modifizierte Funktion lautet wie folgt:

 Funktion getChildareaid ($ id) {
    $ Area = new \ app \ Common \ Model \ Area;
    $ result = collection ($ area-> wob
    $ res = [];
    if ($ result) {
        foreach ($ ergeben als $ key => $ val) {
            $ res [] = $ val ['id'];
            $ res = array_merge ($ res, getChildareAid ($ val ['id']));
        }
    }
    Return $ res;
}

Diese modifizierte Funktion erstellt jedes Mal ein neues $res -Array, wenn es rekursiv bezeichnet wird und die rekursiven Ergebnisse in den aktuellen $res zusammenfasst, wodurch das Problem der Ergebnisakkumulation vermieden wird. Welche die gewählte Lösung zu wählen ist, hängt von der Gesamtstruktur und Wartbarkeit des Codes ab. Normalerweise ist das Umschreiben von Funktionen klarer und leichter zu verstehen.

Durch die oben genannten Methoden kann das Problem der Rückruffunktion in foreach -Schleife effektiv gelöst werden, um sicherzustellen, dass das richtige Ergebnis jedes Mal erzielt werden kann, wenn die Rückruffunktion aufgerufen wird.

Das obige ist der detaillierte Inhalt vonWarum tritt das Problem der Ergebnisakkumulation bei der Verwendung von Rückruffunktionen in foreach -Schleifen auf? Wie löst ich es?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Was ist der Unterschied zwischen absoluten und müßigen Sitzungszeitüberschreitungen?Was ist der Unterschied zwischen absoluten und müßigen Sitzungszeitüberschreitungen?May 03, 2025 am 12:21 AM

Die Absolute -Sitzungs -Zeitlimit startet zum Zeitpunkt der Erstellung der Sitzung, während eine Zeitlimit in der Leerlaufsitzung zum Zeitpunkt der No -Operation des Benutzers beginnt. Das Absolute -Sitzungs -Zeitlimit ist für Szenarien geeignet, in denen eine strenge Kontrolle des Sitzungslebenszyklus erforderlich ist, z. B. finanzielle Anwendungen. Das Timeout der Leerlaufsitzung eignet sich für Anwendungen, die die Benutzer für lange Zeit aktiv halten, z. B. soziale Medien.

Welche Schritte würden Sie unternehmen, wenn Sitzungen nicht auf Ihrem Server funktionieren?Welche Schritte würden Sie unternehmen, wenn Sitzungen nicht auf Ihrem Server funktionieren?May 03, 2025 am 12:19 AM

Der Serversitzungsausfall kann durch Befolgen der Schritte gelöst werden: 1. Überprüfen Sie die Serverkonfiguration, um sicherzustellen, dass die Sitzung korrekt festgelegt wird. 2. Überprüfen Sie die Client -Cookies, bestätigen Sie, dass der Browser es unterstützt und korrekt senden. 3. Überprüfen Sie die Speicherdienste wie Redis, um sicherzustellen, dass sie normal arbeiten. 4. Überprüfen Sie den Anwendungscode, um die korrekte Sitzungslogik sicherzustellen. Durch diese Schritte können Konversationsprobleme effektiv diagnostiziert und repariert werden und die Benutzererfahrung verbessert werden.

Welche Bedeutung hat die Funktion Session_start ()?Welche Bedeutung hat die Funktion Session_start ()?May 03, 2025 am 12:18 AM

Session_Start () iscrucialinphPFormAnagingUSSERSIONS.1) ItinitiatesanewSessionifnoneExists, 2) Wiederaufnahmen und 3) setaSessionCookieforContinuityAcrossRequests, aktivierende Anwendungen wie

Was ist für die Festlegung der HTTPonly -Flag für Sitzungs Cookies wichtig?Was ist für die Festlegung der HTTPonly -Flag für Sitzungs Cookies wichtig?May 03, 2025 am 12:10 AM

Das Festlegen des HTTPonly -Flags ist für Sitzungscookies von entscheidender Bedeutung, da es effektiv verhindern und die Informationen zur Benutzersitzung schützen kann. Insbesondere 1) Das Httponly -Flag verhindert, dass JavaScript auf Cookies zugreift, 2) Das Flag kann durch SetCookies eingestellt werden und in PHP und Flasche 3), obwohl es nicht von allen Angriffen von allen Angriffen verhindert werden kann, Teil der Gesamtsicherheitsrichtlinie sein sollte.

Welches Problem lösen PHP -Sitzungen in der Webentwicklung?Welches Problem lösen PHP -Sitzungen in der Webentwicklung?May 03, 2025 am 12:02 AM

PhpSsionSsionSolvetheProblemofMaintainingStateAcrossmultipehttprequestsBoringDataontheserverandassociatingitittprequests.1) Sie starteten die Stundeataserver-Seite, typischerweise infileSordatabasen, undusaSasionIdinacookookookotenData

Welche Daten können in einer PHP -Sitzung gespeichert werden?Welche Daten können in einer PHP -Sitzung gespeichert werden?May 02, 2025 am 12:17 AM

PHPSSIONS CANSTORESTRINGEN, ZUGNALTEN, ARRAYS, ANDOBjekte.1.

Wie starten Sie eine PHP -Sitzung?Wie starten Sie eine PHP -Sitzung?May 02, 2025 am 12:16 AM

TostartaphpSession, useSession_start () atthescript'Sbeginning.1) PlaCEITBEFOREANYOUTPUTTOTHESESSIONSCOOKIE.2) useSsionsforuserDatalikeloginStatusOrShopingCarts

Was ist eine Sitzungsregeneration und wie verbessert es die Sicherheit?Was ist eine Sitzungsregeneration und wie verbessert es die Sicherheit?May 02, 2025 am 12:15 AM

Die Sitzung der Sitzung bezieht sich auf die Generierung einer neuen Sitzungs -ID und die Ungültigmachung der alten ID, wenn der Benutzer sensible Vorgänge bei festgelegten Sitzungsangriffen ausführt. Die Implementierungsschritte umfassen: 1. Erkennen sensibler Vorgänge, 2. Erstellen neuer Sitzungs-ID, 3..

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

PHPStorm Mac-Version

PHPStorm Mac-Version

Das neueste (2018.2.1) professionelle, integrierte PHP-Entwicklungstool

WebStorm-Mac-Version

WebStorm-Mac-Version

Nützliche JavaScript-Entwicklungstools

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

Herunterladen der Mac-Version des Atom-Editors

Herunterladen der Mac-Version des Atom-Editors

Der beliebteste Open-Source-Editor