Position actuelle: Accueil> Derniers articles> Comparaison de la fonction list () et de la boucle foreach (): Laquelle est la plus adaptée aux opérations de destruction du tableau?

Comparaison de la fonction list () et de la boucle foreach (): Laquelle est la plus adaptée aux opérations de destruction du tableau?

gitbox 2025-09-04

Dans PHP, il existe deux méthodes courantes de destructeur de tableau (destructeur ou de déballage): attribuez des éléments de tableau à plusieurs variables à la fois en utilisant la liste () (ou la syntaxe de phrase [] ) et utilisez ForEach () pour supprimer les éléments dans les itérations et les déconstruire manuellement. Les utilisations des deux sont croisées, mais l'intention de conception originale, la lisibilité, les performances et les scénarios applicables sont différentes. Ce qui suit est une comparaison des concepts, de la syntaxe, de la lisibilité, des situations limites, des performances et des meilleures pratiques, et fournit des suggestions pratiques et des exemples de code. Pour les instructions officielles et l'évolution de la version de List () / courte lettre [] , veuillez vous référer au manuel PHP. Php +1

1. Revue du concept: list () / [] vs foreach ()

  • List () (et [] court-circuit) est utilisé pour "déballer" plusieurs éléments d'un tableau sur des variables indépendantes en même temps, adaptées à la position d'élément connue ou au nom de clé connu. Depuis PHP 7.1, la déconstruction basée sur le nom de clé est prise en charge (c'est-à-dire ['id' => $ id] = $ arr ). Php +1

  • ForEach () est une construction de traversée utilisée pour traverser des tableaux ou des objets traversables . Vous pouvez utiliser la syntaxe de déconstruction pour collaborer la tête du corps de boucle (par exemple foreach ($ lignes comme ['id' => $ id, 'name' => $ name] ) ou utilisez list () / indice à l'intérieur de la boucle pour démonter un seul élément. La force de ForEach est itère sur des ensembles de longueurs arbitraires et accéder à la clé / valeur. Php

2. Comparaison de syntaxe et utilisation commune

2.1 déconstruction unique (fixé un petit nombre d'éléments)

 <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">// ou court:</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>

Convient pour: structure de tableau connue, une seule affectation (comme le déballage rapide de la valeur de retour de la fonction). Pour des exemples officiels et des instructions, veuillez vous référer au manuel. Php

2.2 Déstruction basée sur les noms de clés (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>

Cela évite la dépendance aux index numériques et améliore la lisibilité et la robustesse. Php

2.3 Déstruction itérative (foreach + déconstruction)

 <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">// traiter avec $id, $name</span></span><span>
}
</span></span>

Lorsqu'il est nécessaire de gérer des ensembles de longueur variable, cette écriture combine "Traversal" et "déconstruction" avec du code concis. Remarque: Dans différentes versions / styles PHP, la compatibilité de la rédaction doit être accordée à l'attention. Communauté PHP Dev

3. Litabilité et maintenance

  • list () / [] est très clair lorsque le temps et l'élément sont réparés : la variable à gauche est claire en un coup d'œil, et la source à droite est claire. Convient pour la valeur de retour de la fonction Démontage ou affectation de variable temporaire.

  • Forach est plus naturel lorsqu'il s'agit de gisements multi-éléments: exprime sémantiquement "faire quelque chose pour chaque élément". Lorsque vous écrivez la déconstruction de l'en-tête FOREEAC , la logique est plus proche de "chaque ligne est un enregistrement, et les champs doivent être démantelés et traités". Cela améliore également la lisibilité. Php

4. situation des limites et sécurité

  • Index manquant : Lorsqu'un index numérique manque une position dans le tableau, la variable correspondante sera définie sur NULL (ou déclenchera l'avis, selon le niveau d'erreur). Utilisez la destruction du nom de clé pour éviter les dépendances de position. Php +1

  • Affectation de référence : Commençant dans PHP 7.3, la déconstruction prend en charge l'affectation de référence ( & ), disponible lorsqu'il est nécessaire de modifier directement les éléments du tableau source ou d'éviter la copie. Php

  • Type et vérification : Dans l'une ou l'autre méthode, la déconstruction n'effectuera pas automatiquement des vérifications de type ou la vérification du champ requise; Lorsque les sources critiques ou de données ne sont pas fiables, la clé doit être explicitement vérifiée et la valeur doit être vérifiée.

5. Considérations de performance

  • Pour le déballage à temps fixe à temps fixe, List () / [] a une surcharge extrêmement faible et est directe (affectation unique).

  • Forach est un choix intuitif et contrôlable pour les scénarios où un grand nombre d'éléments sont traités un par un (comme le traitement des dizaines de milliers d'enregistrements), car il est conçu pour itérativement; L'utilisation de déconstruction dans une boucle n'est pas aussi lente que inacceptable que de prendre manuellement des valeurs en dehors de la boucle. D'une manière générale, ce type d'écart de performance n'est pas un goulot d'étranglement dans la plupart des applications: les choix doivent être basés sur la clarté et la sémantique. Pour effectuer une analyse référence stricte pour des scénarios spécifiques, vous pouvez utiliser un outil de référence à microme (vrai) simple ou de référence pour mesurer la consommation sous des données d'application réelles. sandbox.ws php

6. Conseils pratiques (quand utiliser lequel)

  • Utilisez list () / [] :

    • Vous obtenez une structure fixe à partir d'une fonction ou d'un tableau (par exemple [x, y] = getCoordine () ) et vous devez déballer immédiatement à plusieurs variables.

    • Il n'y a qu'une seule exigence d'affectation, et le nom de position / clé de l'élément est connu et stable.

    • Vous voulez écrire des affectations de déconstruction concises (plus comme les tuples de déconstruire).

  • Utiliser foreach () (peut fusionner déconstruct) :

    • Il est nécessaire de traverser un tableau ou un traversé pour traiter n'importe quel nombre d'enregistrements.

    • Chaque enregistrement doit être traité plusieurs étapes, un jugement conditionnel, des opérations d'E / S ou de base de données, et la sémantique itérative est plus appropriée.

    • Vous souhaitez déconstruire directement chaque élément de l'en-tête de boucle pour améliorer la lisibilité ( foreach ($ lignes comme ['id' => $ id, 'name' => $ name]) ).

7. Exemple de comparaison: deux façons d'écrire la même tâche

Tâche: supprimez l'ID et le nom de la liste d'utilisateurs et générez une chaîne.

Déconstruire chaque ligne avec 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>

Déconstruire en utilisant array_map + (pas foreach, mais traitement schématiquement en même temps)

 <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>

Les deux sont lisibles, le premier est plus intuitif; Le second est plus fonctionnel, mais n'est pas aussi flexible que pour la manipulation des exceptions et la sortie précoce.

8. Résumé (points clés de la prise de décision)

  • La déconstruction ( list () / [] ) convient au déballage: sémantique concise et claire, en particulier l'attribution unique de structures fixes. Le manuel officiel et les instructions de migration montrent que depuis PHP 7.1, la déconstruction du nom de clé et la brève écriture sont disponibles et recommandés par des méthodes d'écriture modernes; PHP 7.3 ajoute des fonctions telles que l'attribution de citation. Php +1

  • ForEach convient au traitement itératif: lors du traitement d'une collection ou du contrôle du flux de boucle, Forach est plus approprié; La déconstruction peut être combinée dans la tête ou dans le corps pour améliorer la lisibilité et la localité. Php

Principe final: hiérarchisez la solution qui rend le code le plus compréhensible et le plus robuste à vos collègues / l'avenir. Utiliser [] (ou list () ) pour déballer rapidement pour les données uniques définies par structure; Utilisez ForEach pour des données de longueur variable ou contrôlées par processus et déconstruire dans une boucle.