PHP pour la boucle de contre foreach avec la gamme
Laquelle de ces serait préférable pour les performances et la lisibilité?
foreach(range(0,10000) as $i) {} //3.847 ms
for($i = 0; $i < 10000; ++$i) {} //0.663 ms
Modifier: Fait un test et le dernier a été de près de 6 fois plus rapide.
ne doivent pas vraiment un problème, mais je vais prendre un sauvage deviner et dire que le bas est plus rapide, mais vous aurez probablement jamais voir la différence.
stackoverflow.com/questions/771008/for-loop-vs-foreach-in-c
Essayez de benchmarking?
tout dépend de vos exigences et à vos données avec vous.
micro-performance est parfois mal.... (Prend votre attention loin de l'endroit où le réel goulot d'étranglement existe)
stackoverflow.com/questions/771008/for-loop-vs-foreach-in-c
Essayez de benchmarking?
tout dépend de vos exigences et à vos données avec vous.
micro-performance est parfois mal.... (Prend votre attention loin de l'endroit où le réel goulot d'étranglement existe)
OriginalL'auteur Emil Aspman | 2012-12-18
Vous devez vous connecter pour publier un commentaire.
Traditionnel
for
boucle est plus rapide queforeach
+range
. Seul le premier utilise la comparaison des entiers et d'augmenter alors que la dernière est de créer un (éventuellement en gros) tableau extrait de chaque élément en la déplaçant à l'intérieur de la matrice de curseur et de vérifier si la fin est atteinte.Si vous exécutez, vous pouvez voir que la simple
for
est deux fois plus rapide queforeach
+range
:Il est préférable d'utiliser traditionnel
for
comme une habitude dans le cas où vous avez besoin pour effectuer une itération sur un nombre donné de fois, mais à la fin de la journée, vous ne verrez pas de grandes améliorations de performances dans la plupart des scénarios (prendre en compte le fait que l'exemple ci-dessus itère 100 fois, si vous réduisez le nombre d'itérations, la différence est plus petite).OriginalL'auteur Carlos
Si c'est ce que critique,
est plus rapide que
mais vous n'aurez pas vraiment d'avis beaucoup de différence sur 1000 itérations
Est-il vraiment indispensable de micro-optimiser.... et si oui, pourquoi ne pouvez-vous pas simplement mettre en place certaines séries de tests pour comparer les différentes options vous-même
for ($i=1000; $i--;) {}
être encore plus rapide (tous les mais dans le sens inverse) ?Pourrait être plus rapide, peut-être.... mais vous pouvez courir encore plus vite en utilisant --$i plutôt que $i--.... il nécessite encore un peu plus d'itérations pour réellement voir la différence dans la vitesse
Devrait être plus rapide car il n'y a pas de vérification pour voir si la boucle a disparu au-delà de la limite, il s'arrête automatiquement lorsqu'il atteint zéro. En javascript sur de grandes itérations, en fait, j'ai remarqué un peu de différence, mais jamais vraiment pris la peine de le tester en PHP.
bien sûr, tout dépend de la question de savoir si ce que vous faites dans la boucle dépend de $i; et, dans l'affirmative, l'ordre d'importance.... c'est une belle astuce, et je peux voir un couple de utilise pour le bien
dans ce cas, il vaut mieux utiliser
while(--$i) {}
, qui est plus lisible et peut-être plus vite.OriginalL'auteur Mark Baker
Foreach
est idéal pour une itération à travers des tableaux qui utilisent des clés et des valeurs.Par exemple, si j'avais un tableau appelé "Utilisateur":
J'ai pu parcourir que très facilement et font encore l'utilisation des touches:
Ce serait impression: l'impression
Avec
for
en boucle, il est plus difficile de conserver l'utilisation des touches.Lorsque vous utilisez orientée objet pratique en PHP, vous verrez que vous serez en utilisant
foreach
presque entièrement, avecfor
les boucles que numérique ou de liste de choses.foreach
également vous évite d'avoir à utilisercount($array)
de trouver le nombre total d'éléments dans le tableau.for
boucle, il n'est pas difficile pour itérer tableau associatif. Juste de récupérer les clés pararray_keys()
et reste même.OriginalL'auteur echo_Me
Foreach est idéal pour une itération à travers des tableaux qui utilisent des clés et des valeurs.
Avec les boucles for, il est plus difficile de conserver l'utilisation des touches.
http://www.c-sharpcorner.com/interviews/answer/2147/ cela peut être utile
OriginalL'auteur rOcKiNg RhO
Dans ce cas particulier (avec
range()
et non pas un tableau passé à partir d'un autre champ d'application) -foreach()
sera plus rapide.for()
battu dans presque tous les autres cas.OriginalL'auteur Narf
comparer la vitesse d'exécution de certaines fonctions php
pour la boucle a pris
for()
boucleusing count()
a pris 20.86401 msfor()
boucleNot using count()
a pris 7.09796 msà l'aide de count() signifie:
for ($i = 1; $i < count($myarr); ++ $i) {
..où, comme foreach() loop:
foreach()
a pris 11.16920 msforeach()
avec les PRINCIPAUX pris 12.35318 msces deux sont fait sur le même tableau et leur temps d'exécution est montré à la fois
for
etforeach
sont les constructions de langage et de leur vitesse d'exécution sera de plus vous ne pouvez pas l'avis de beaucoup plus de différence, sauf si vous les utilisez sur un tableau avec des milliers de dossiers.OriginalL'auteur Sivagopal Manpragada