Aktueller Standort: Startseite> Neueste Artikel> Vergleich der Funktion von list () und foreach () Schleife: Welches eignet sich besser für Array -Zerstörungsoperationen?

Vergleich der Funktion von list () und foreach () Schleife: Welches eignet sich besser für Array -Zerstörungsoperationen?

gitbox 2025-09-04

In PHP gibt es zwei gängige Methoden der Array -Zerstörung (Zerstörung oder Auspacken): Weisen Sie mehrere Variablen gleichzeitig Arrayelemente mit LIST () (oder Phrase Syntax [] ) zu und verwenden Sie foreach () , um Elemente in Iterationen zu entfernen und manuell zu dekonstruieren. Die Verwendungen der beiden werden überschnitten, aber die ursprüngliche Entwurfsabsicht, die Lesbarkeit, die Leistung und die anwendbaren Szenarien sind unterschiedlich. Das Folgende ist ein Vergleich von Konzepten, Syntax, Lesbarkeit, Grenzsituationen, Leistung und Best Practices und liefert praktische Vorschläge und Codebeispiele. Für offizielle Anweisungen und Versionen von List () / Short Letter [] finden Sie das PHP -Handbuch. Php +1

1. Concept Review: List () / [] vs foreach ()

  • List () (und [] Kurzschreiber) wird verwendet, um mehrere Elemente eines Arrays gleichzeitig auf unabhängige Variablen zu "entpacken", die für die bekannte Elementposition oder den bekannten Schlüsselnamen geeignet sind. Seit PHP 7.1 wird die Dekonstruktion der Schlüsselname unterstützt (d. H. ['ID' => $ ID] = $ arr ). Php +1

  • foreach () ist ein Traversalkonstrukt, das zum Durchlaufen von Arrays oder durchquerenbaren Objekten verwendet wird. Sie können die Deconstruction -Syntax verwenden, um den Schleifenkörperkopf (z. B. Foreach ($ Zeilen als ['id' => $ id, 'name' => $ name]) ) oder die Liste () / ein Index innerhalb der Schleife zu verwenden, um ein einzelnes Element zu zerlegen. Die Stärke von Foreach besteht darin, über willkürliche Längensätze und zugreift auf Schlüssel/Wert zuzugreifen. Php

2. Syntaxvergleich und gemeinsame Verwendung

2.1 einmalige Dekonstruktion (eine kleine Anzahl von Elementen festgelegt)

 <span><span><span class="hljs-variable">$data</span></span><span> = [</span><span><span class="hljs-string">'Alice'</span></span><span>, </span><span><span class="hljs-string">'Bob'</span></span><span>, </span><span><span class="hljs-string">'Carol'</span></span><span>];
</span><span><span class="hljs-keyword">list</span></span><span>(</span><span><span class="hljs-variable">$a</span></span><span>, </span><span><span class="hljs-variable">$b</span></span><span>, </span><span><span class="hljs-variable">$c</span></span><span>) = </span><span><span class="hljs-variable">$data</span></span><span>;
</span><span><span class="hljs-comment">// oder kurz:</span></span><span>
[</span><span><span class="hljs-variable">$a</span></span><span>, </span><span><span class="hljs-variable">$b</span></span><span>, </span><span><span class="hljs-variable">$c</span></span><span>] = </span><span><span class="hljs-variable">$data</span></span><span>;
</span></span>

Geeignet für: bekannte Array -Struktur, nur eine Zuordnung (z. B. schnelles Auspacken aus dem Rückgabewert aus der Funktion). Offizielle Beispiele und Anweisungen finden Sie im Handbuch. Php

2.2 Dekonstruktion basierend auf Schlüsselnamen (7.1+)

 <span><span><span class="hljs-variable">$row</span></span><span> = [</span><span><span class="hljs-string">'id'</span></span><span> =&gt; </span><span><span class="hljs-number">42</span></span><span>, </span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'Tom'</span></span><span>];
[</span><span><span class="hljs-string">'id'</span></span><span> =&gt; </span><span><span class="hljs-variable">$id</span></span><span>, </span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-variable">$name</span></span><span>] = </span><span><span class="hljs-variable">$row</span></span><span>;
</span></span>

Dies vermeidet die Abhängigkeit von numerischen Indizes und verbessert die Lesbarkeit und Robustheit. Php

2.3 iterative Dekonstruktion (Foreach + Dekonstruktion)

 <span><span><span class="hljs-variable">$rows</span></span><span> = [
    [</span><span><span class="hljs-string">'id'</span></span><span> =&gt; </span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'A'</span></span><span>],
    [</span><span><span class="hljs-string">'id'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'B'</span></span><span>],
];

</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$rows</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> [</span><span><span class="hljs-string">'id'</span></span><span> =&gt; </span><span><span class="hljs-variable">$id</span></span><span>, </span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-variable">$name</span></span><span>]) {
    </span><span><span class="hljs-comment">// bewältigen $id, $name</span></span><span>
}
</span></span>

Wenn es notwendig ist, mit Sätzen mit variabler Länge umzugehen, kombiniert dieses Schreiben "Traversal" und "Dekonstruktion" mit prägnantem Code. Hinweis: In verschiedenen PHP -Versionen/-stilen muss das Schreiben der Kompatibilität geachtet werden. PHP Dev Community

3. Lesbarkeit und Wartung

  • List () / [] ist sehr klar, wenn einmal und ein Element festgelegt ist : Die Variable links ist auf einen Blick klar und die Quelle rechts ist klar. Geeignet für den Funktionsrückgabewert Auspackung oder vorübergehende variable Zuordnung.

  • Foreach ist natürlicher, wenn es um Multi-Element-Sets geht: Semantisch ausdrückt "etwas für jedes Element". Wenn Sie die Dekonstruktion im Foreach -Kopfschiff schreiben, ist die Logik näher an "Jede Zeile ist eine Aufzeichnung und die Felder müssen abgebaut und verarbeitet werden". Dies verbessert auch die Lesbarkeit. Php

4. Grenzsituation und Sicherheit

  • Index fehlen : Wenn ein numerischer Index eine Position im Array fehlt, wird die entsprechende Variable auf NULL eingestellt (oder die Mitteilung abhängig von der Fehlerebene auslösen). Verwenden Sie den Schlüsselnamen Zerstörung, um Positionsabhängigkeiten zu vermeiden. Php +1

  • Referenzzuordnung : Beginnend in PHP 7.3 unterstützt Deconstruction die Referenzzuweisung ( & ), die verfügbar ist, wenn die Quellarray -Elemente direkt geändert oder das Kopieren vermieden werden müssen. Php

  • Typ und Überprüfung : In beiden Methoden führt die Dekonstruktion nicht automatisch Typ -Überprüfungen oder die erforderliche Feldüberprüfung durch. Wenn sicherheitskritische oder Datenquellen nicht vertrauenswürdig sind, sollte der Schlüssel explizit überprüft und der Wert überprüft werden.

5. Leistungsüberlegungen

  • List () / [] hat für Einzelzeiten, Fixedelement-Auspackung, extrem niedrig und ist direkt (einmalige Zuordnung).

  • Foreach ist eine intuitive und kontrollierbare Wahl für Szenarien, in denen eine große Anzahl von Elementen nacheinander verarbeitet wird (z. B. Zehntausende von Datensätzen), da sie für iterativ ausgelegt ist. Die Verwendung der Dekonstruktion innerhalb einer Schleife ist nicht so langsam wie inakzeptabel, als manuell Werte außerhalb der Schleife zu nehmen. Im Allgemeinen ist diese Art von Leistungslücke in den meisten Anwendungen kein Engpass: Die Auswahl sollte auf Klarheit und Semantik basieren. Um ein striktes Benchmarking für bestimmte Szenarien durchzuführen, können Sie ein einfaches Microtime -Benchmark- oder Benchmark -Tool verwenden, um den Verbrauch unter realen Anwendungsdaten zu messen. sandbox.ws php

6. Praktische Rat (wann zu verwenden, welches zu verwenden)

  • Verwenden Sie list () / [] :

    • Sie erhalten eine feste Struktur von einer Funktion oder einem Array (z. B. [x, y] = getcoordinates () ) und Sie müssen sofort auf mehrere Variablen auspacken.

    • Es gibt nur eine Zuweisungsanforderung, und der Elementposition/der Schlüsselname ist bekannt und stabil.

    • Möchten Sie kurze Dekonstruktionszuweisungen schreiben (eher wie Dekonstruktion von Tupeln).

  • Verwendung für Each () (kann Dekonstruktion verschmelzen) :

    • Es ist notwendig, ein Array oder einen Weg zu durchqueren, um eine beliebige Anzahl von Datensätzen zu verarbeiten.

    • Jeder Datensatz muss mehrere Schritte, bedingte Beurteilung, E/A- oder Datenbankoperationen und iterative Semantik verarbeitet werden.

    • Sie möchten jedes Element im Schleifenkopf direkt dekonstruieren, um die Lesbarkeit zu verbessern ( Foreach ($ Zeilen als ['id' => $ id, 'name' => $ name]) ).

7. Beispielvergleich: Zwei Möglichkeiten, dieselbe Aufgabe zu schreiben

Aufgabe: Nehmen Sie die ID und den Namen der Benutzerliste heraus und generieren Sie eine Zeichenfolge.

Dekonstruieren jede Linie mit foreach

 <span><span><span class="hljs-variable">$users</span></span><span> = [
    [</span><span><span class="hljs-string">'id'</span></span><span> =&gt; </span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'Alice'</span></span><span>],
    [</span><span><span class="hljs-string">'id'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'Bob'</span></span><span>],
];

</span><span><span class="hljs-variable">$result</span></span><span> = [];
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$users</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> [</span><span><span class="hljs-string">'id'</span></span><span> =&gt; </span><span><span class="hljs-variable">$id</span></span><span>, </span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-variable">$name</span></span><span>]) {
    </span><span><span class="hljs-variable">$result</span></span><span>[] = </span><span><span class="hljs-title function_ invoke__">sprintf</span></span><span>(</span><span><span class="hljs-string">'%d: %s'</span></span><span>, </span><span><span class="hljs-variable">$id</span></span><span>, </span><span><span class="hljs-variable">$name</span></span><span>);
}
</span></span>

Dekonstruktion mit Array_map + (nicht für Each, sondern gleichzeitig schematisch verarbeiten)

 <span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_map</span></span><span>(function(</span><span><span class="hljs-variable">$u</span></span><span>) {
    [</span><span><span class="hljs-string">'id'</span></span><span> =&gt; </span><span><span class="hljs-variable">$id</span></span><span>, </span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-variable">$name</span></span><span>] = </span><span><span class="hljs-variable">$u</span></span><span>;
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">sprintf</span></span><span>(</span><span><span class="hljs-string">'%d: %s'</span></span><span>, </span><span><span class="hljs-variable">$id</span></span><span>, </span><span><span class="hljs-variable">$name</span></span><span>);
}, </span><span><span class="hljs-variable">$users</span></span><span>);
</span></span>

Beide sind lesbar, der erste ist intuitiver; Der zweite ist funktionaler, aber nicht so flexibel wie für die Ausnahmebehandlung und den frühen Ausgang.

8. Zusammenfassung (Schlüsselpunkte der Entscheidungsfindung)

  • Dekonstruktion ( list () / [] ) eignet sich zum Auspacken: präzise und klare Semantik, insbesondere einzelne Zuordnung fester Strukturen. Die offiziellen Handbuch- und Migrationsanweisungen zeigen, dass seit Php 7.1 der Schlüsselname Dekonstruktion und [] kurzes Schreiben verfügbar sind und moderne Schreibmethoden empfohlen werden. PHP 7.3 fügt Funktionen wie Zitierzuweisung hinzu. Php +1

  • Foreach eignet sich für die iterative Verarbeitung: Bei der Verarbeitung einer Sammlung oder der Steuerung des Schleifenflusses ist es besser geeignet. Die Dekonstruktion kann im Kopf oder im Körper kombiniert werden, um die Lesbarkeit und die Lokalität zu verbessern. Php

Letztes Prinzip: Priorisieren Sie die Lösung, die den Code für Ihre Kollegen/die Zukunft für Ihre Kollegen/die künftigste und robustste macht. Verwenden Sie [] (oder list () ), um schnell für einmalige, strukturdefinierte Daten auszupacken; Verwenden Sie für Variable Länge oder prozessgesteuerte Daten und dekonstruieren Sie sie in einer Schleife.