Maison > Article > développement back-end > Utilisation de foreach() en php et comparaison des performances avec while
PHP 4 a introduit la construction foreach, un peu comme Perl et d'autres langages. Il s'agit simplement d'un moyen pratique de parcourir un tableau. foreach ne peut être utilisé que sur des tableaux, et une erreur se produira lorsque vous tenterez de l'utiliser sur d'autres types de données ou une variable non initialisée . Il existe deux syntaxes, la seconde étant une extension moins importante mais utile de la première.
foreach (array_expression as $value) statement foreach (array_expression as $key => $value) statement
Le premier format parcourt le tableau array_expression donné. Dans chaque boucle, la valeur de l'unité actuelle est attribuée à $value et le pointeur à l'intérieur du tableau avance d'un pas (l'unité suivante sera donc obtenue dans la boucle suivante).
Le deuxième format fait la même chose, sauf que le nom de clé de la cellule actuelle est également attribué à la variable $key dans chaque boucle.
Depuis PHP 5, il est également possible de itérer des objets.
Remarque : Lorsque foreach commence à s'exécuter, le pointeur à l'intérieur du tableau pointe automatiquement vers la première unité. Cela signifie qu'il n'est pas nécessaire d'appeler reset() avant la boucle foreach.
Remarque : À moins que le tableau ne soit référencé par , foreach opère sur une copie du tableau spécifié, pas sur le tableau lui-même. foreach a des effets secondaires sur les pointeurs de tableau. Ne vous fiez pas à la valeur d'un pointeur de tableau pendant ou après une boucle foreach à moins qu'il ne soit réinitialisé.
Depuis PHP 5, il est facile de modifier les éléments d'un tableau en faisant précéder $value de &. Cette méthode attribue par référence plutôt que de copier une valeur.
<?php $arr = array(1, 2, 3, 4); foreach ($arr as &$value) { $value = $value * 2; } // $arr is now array(2, 4, 6, 8) ?>
Cette méthode n'est disponible que lorsque le tableau parcouru peut être référencé (par exemple, il s'agit d'une variable).
<?php foreach (array(1, 2, 3, 4) as &$value) { $value = $value * 2; } ?>
foreach opère sur une copie du tableau (en copiant le tableau), tandis que while fonctionne en déplaçant l'index interne du tableau. De manière générale, on pense que while devrait être plus rapide que foreach (. car foreach démarre l'exécution lorsque le tableau est copié en premier, tandis que le pointeur interne est déplacé directement), mais le résultat est tout le contraire.
Ce qui est fait dans la boucle est une opération de "lecture" de tableau, donc foreach est plus rapide que while :
foreach ($array as $value) { echo $value; } while (list($key) = each($array)) { echo $array[$key]; }
Ce qui est fait dans la boucle est une opération "d'écriture" de tableau, donc while est plus rapide que foreach :
foreach ($array as $key => $value) { echo $array[$key] = $value . '...'; } while (list($key) = each($array)) { $array[$key] = $array[$key] . '...'; }
Résumé : On pense généralement que foreach implique une copie de valeur et sera plus lent que while, mais en fait, si vous effectuez uniquement des opérations de lecture de tableau dans une boucle, alors foreach est très
rapide. En effet, le mécanisme de copie utilisé par PHP est le "comptage de références, copie sur écriture". C'est-à-dire que même si une variable est copiée en PHP, la forme initiale est en fait toujours sous la forme de. une référence.Seulement lorsque la variable La copie réelle ne se produira que lorsque le contenu change. La raison en est d'économiser la consommation de mémoire et également d'améliorer l'efficacité de la
copie. De ce point de vue, le fonctionnement efficace de lecture de foreach n’est pas difficile à comprendre. De plus, comme foreach n'est pas adapté au traitement des opérations d'écriture sur tableau, nous pouvons tirer la conclusion
que dans la plupart des cas, le code des opérations d'écriture sur tableau sous la forme foreach ($array as $key => $value) est Doit être remplacé par while (list($key) =
each($array)). La différence de vitesse produite par ces techniques n'est peut-être pas évidente dans les petits projets, mais dans les grands projets comme les frameworks, où une seule requête implique souvent des centaines, des milliers ou des dizaines de milliers d'opérations de boucle de tableau, la différence sera évidente.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!