PHPFrance

Discuter de tout ce qui touche au PHP, en français.

Vers le contenu

» Masquer les résultats de la recherche

Recherche dynamique PHPfrance

  1. Effectuez une recherche, les résultats s'afficheront dynamiquement ici.

Performances des boucles PHP for/while/foreach  Sujet résolu

Pour les initiés, les confirmés, les experts, les gourous... voire plus.

Performances des boucles PHP for/while/foreach

Messagede damdec le 19 Avr 2008, 15:33

Bonjour,

je viens de lire ça et ça et après mes propres tests pour vérifier, je viens de découvrir à ma grande surprise qu'un
Syntaxe: [ Télécharger ] [ Masquer ]
Code php
while( list($key,$val)=each($array) ) $tmp[]=$val;

est vraiment beaucoup plus rapide qu'un simple
Syntaxe: [ Télécharger ] [ Masquer ]
Code php
foreach( $array as $key=>$val ) $tmp[]=$val;


Je voulais savoir si quelqu'un avait une explication parce que je trouve ça vraiment surprenant. Le foreach serait une boucle à bannir de nos scripts ?!! Apparemment oui :shock:
damdec
Maitre du phpinfo()
 
Messages: 27
Inscription: 25 Aoû 2007, 10:46

Publicité

Messagede Hubert Roksor le 19 Avr 2008, 15:48

Attention, le premier lien que tu cites est super vieux et porte si mes souvenirs sont bons sur PHP 4. Entre temps, les choses ont beaucoup changé. De plus, je recommande de ne pas porter trop d'attention à ce genre d'optimizations, parce qu'elles font rarement gagner grand-chose en performance à l'échelle d'un script et surtout de ne jamais croire les benchmarks d'autrui et toujours vérifier toi-même sur une version récente de PHP.

Ceci dit, tu seras heureux d'apprendre que foreach est généralement 3 à 5 fois plus rapide sous PHP 5.2 qu'une solution équivalente basée sur list() / each(), notamment parce que les deux fonctionnent de manière équivalente. "Mais pourquoi une telle différence alors ?" me demanderas-tu. En fait c'est simple, tu as oublié d'utiliser reset() avant ta boucle. foreach remet toujours le pointeur au début avant de commencer.
Le saviez-vous ? Mozilla retient HTTP prisonnier du siècle dernier, à vous de voter ! (bug #327765)
Avatar de l’utilisateur
Hubert Roksor
Administrateur PHPfrance
Administrateur PHPfrance
 
Messages: 3152
Inscription: 07 Fév 2005, 18:27

Messagede damdec le 19 Avr 2008, 16:01

effectivement je viens d'ajouter un reset dans mon script de test et cela correspond à ce que tu dis : foreach est 3 à 5 fois plus rapide... Mais alors dans une utilisation courante quand faut il choisir foreach plutôt que while/list ?
damdec
Maitre du phpinfo()
 
Messages: 27
Inscription: 25 Aoû 2007, 10:46

Messagede Hubert Roksor le 19 Avr 2008, 16:12

Quand ? Hmm, toujours. foreach est plus simple et plus performant, il n'y a donc aucune raison d'émuler son fonctionnement avec reset()/list()/each(). Cette méthode date de l'époque où foreach n'existait pas, c'est pour la remplacer qu'il a été créé.
Le saviez-vous ? Mozilla retient HTTP prisonnier du siècle dernier, à vous de voter ! (bug #327765)
Avatar de l’utilisateur
Hubert Roksor
Administrateur PHPfrance
Administrateur PHPfrance
 
Messages: 3152
Inscription: 07 Fév 2005, 18:27

Messagede damdec le 19 Avr 2008, 16:15

Merci pour ces réponses ultra rapide ( encore plus qu'un foreach... ok je sors :P ) !!

Bon bah ça me rassure en tout cas, donc je passe le sujet en résolu !
damdec
Maitre du phpinfo()
 
Messages: 27
Inscription: 25 Aoû 2007, 10:46

Messagede Hywan le 19 Avr 2008, 19:55

Tiens d'ailleurs j'ai un bench Hubert/foreach et ...

(pour pas que damdec se sente seul ... :roll:)
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa Framework : http://hoa-project.net (sur identi.ca/hoaproject et twitter.com/hoaproject).
Avatar de l’utilisateur
Hywan
ViPHP
ViPHP
 
Messages: 4397
Inscription: 03 Mai 2005, 20:01
Localisation: Haut-doubs


Retourner vers PHP avancé

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités

  • Publicité