web-dev-qa-db-fra.com

PHP pour boucle contre foreach avec gamme

Lequel de ceux-ci serait meilleur pour la performance et la lisibilité?

foreach(range(0,10000) as $i) {} // 3.847 ms

for($i = 0; $i < 10000; ++$i) {} // 0.663 ms

Edit : Fait un repère et le dernier était presque 6 fois plus rapide.

12
Emil Aspman

La boucle for traditionnelle est plus rapide que foreach + range. Le premier utilise uniquement la comparaison d'entiers et augmente alors que le dernier doit créer un tableau (éventuellement grand), puis extraire chaque élément en déplaçant le curseur du tableau interne et en vérifiant si la fin est atteinte.

Si vous l'exécutez, vous constaterez que for est deux fois plus rapide que foreach + range:

$t0 = microtime(true);
for ($i = 0; $i < 100000; $i++) {
}
echo 'for loop: ' . (microtime(true) - $t0) . ' s', PHP_EOL;

$t0 = microtime(true);
foreach (range(0, 100000) as $i) {
}
echo 'foreach + range loop: ' . (microtime(true) - $t0) . ' s', PHP_EOL;

Il est préférable d'utiliser for traditionnel comme habitude au cas où vous auriez à itérer un nombre de fois donné, mais en fin de journée, vous ne verrez pas de grandes améliorations de performances dans la plupart des scénarios (tenez compte du fait que l'exemple ci-dessus itère 100k fois, si vous réduisez le nombre d’itérations, la différence est moins grande).

10
Carlos

Si c'est si critique,

for($i = 0; $i < 1000; ++$i) {}

est plus rapide que

for($i = 0; $i < 1000; $i++) {}

mais vous ne remarquerez pas vraiment beaucoup de différence sur seulement 1000 itérations

Est-il vraiment essentiel de micro-optimiser ... et si oui, pourquoi ne pas simplement configurer des tests pour comparer les différentes options vous-même

6
Mark Baker

Dans ce cas particulier (avec range() et pas un tableau passé d'une autre portée) - foreach() sera plus rapide. for() le battrait dans presque tous les autres cas.

0
Narf

Foreach est idéal pour parcourir des tableaux qui utilisent des clés et des valeurs. Avec les boucles for, il est plus difficile de conserver l’utilisation des clés. http://www.c-sharpcorner.com/interviews/answer/2147/ ceci peut être utile

0
rOcKiNg RhO

Foreach est idéal pour parcourir des tableaux qui utilisent des clés et des valeurs.

Par exemple, si j'avais un tableau appelé "User":

$User = array(
    'name' => 'Bob',
    'email' => '[email protected]',
    'age' => 200
);

Je pouvais parcourir cela très facilement et continuer à utiliser les clés:

foreach ($User as $key => $value) {
    echo $key.' is '.$value.'<br />';
}

Cela afficherait:

name is Bob
email is [email protected]
age is 200

Avec les boucles for, il est plus difficile de conserver l’utilisation des clés.

Lorsque vous utilisez PHP en mode orienté objet, vous constaterez que vous utiliserez presque entièrement foreach, avec des boucles for uniquement pour les éléments numériques ou basés sur des listes. foreach vous évite également d'avoir à utiliser count($array) pour trouver le nombre total d'éléments dans le tableau.

0
echo_Me

comparer la vitesse d'exécution de certaines fonctions php

pour la boucle prise

for() loop using count() a pris 20,86401 ms

for() loop Not using count() a pris 7,09796 ms

utiliser count () signifie: for ($i = 1; $i < count($myarr); ++ $i) { ..

Où comme boucle foreach ():

foreach() a pris 11.16920 ms

foreach() with KEY a pris 12,35318 ms

ces deux opérations sont effectuées sur le même tableau et leur temps d'exécution respectif est indiqué. Les versions for et foreach sont des constructions de langage et leur vitesse d'exécution sera supérieure, de sorte que vous ne remarquerez pas plus de différence à moins de les utiliser sur un tableau contenant des milliers d'enregistrements.

0