Retourner sur PHPFrance
Actualité sur Open Office

 FAQFAQ   RechercherRechercher   Liste des MembresListe des Membres   Groupes d'utilisateursGroupes d'utilisateurs   Accéder aux archivesArchives  S'enregistrerS'enregistrer 
 ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 
PHPFrance est maintenu par des bénévoles et soutenu par les sociétés Actoo et Anaska, Conseil et Formation pour PHP
Pour optimiser vos chances commencez par consulter la FAQ et faites une recherche.
Bon esprit, politesse et entraide sont les règles de ce forum.

[Résolu] Performances des boucles PHP for/while/foreach

 
Poster un nouveau sujet   Répondre au sujet    PHPFrance Index du Forum -> PHP5
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
damdec
Maitre du phpinfo()


Inscrit le: 25 Aoû 2007
Messages: 27
MessagePosté le: 19 Avr 2008, 16:33    Sujet du message: Performances des boucles PHP for/while/foreach Répondre en citant

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
PHP:
while( list($key,$val)=each($array) ) $tmp[]=$val;

est vraiment beaucoup plus rapide qu'un simple
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 Shocked
Voir le profil de l'utilisateur Envoyer un message privé
Hubert Roksor
Détendu


Inscrit le: 07 Fév 2005
Messages: 3155
Ce membre fait partie des ViPHP
MessagePosté le: 19 Avr 2008, 16:48    Sujet du message: Répondre en citant

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)
Voir le profil de l'utilisateur Envoyer un message privé
damdec
Maitre du phpinfo()


Inscrit le: 25 Aoû 2007
Messages: 27
MessagePosté le: 19 Avr 2008, 17:01    Sujet du message: Répondre en citant

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 ?
Voir le profil de l'utilisateur Envoyer un message privé
Hubert Roksor
Détendu


Inscrit le: 07 Fév 2005
Messages: 3155
Ce membre fait partie des ViPHP
MessagePosté le: 19 Avr 2008, 17:12    Sujet du message: Répondre en citant

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)
Voir le profil de l'utilisateur Envoyer un message privé
damdec
Maitre du phpinfo()


Inscrit le: 25 Aoû 2007
Messages: 27
MessagePosté le: 19 Avr 2008, 17:15    Sujet du message: Répondre en citant

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

Bon bah ça me rassure en tout cas, donc je passe le sujet en résolu !
Voir le profil de l'utilisateur Envoyer un message privé
HyWaN
Magohamoth


Inscrit le: 03 Mai 2005
Messages: 2123
Localisation: Haut-doubs
Ce membre fait partie des ViPHP
MessagePosté le: 19 Avr 2008, 20:55    Sujet du message: Répondre en citant

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

(pour pas que damdec se sente seul ... Rolling Eyes)
_________________
« 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. »

Actuellement :
- livre : Programmation Orientée Objet avec PHP ;
- Hoa Framework : http://hoa-project.net.
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur Adresse AIM MSN Messenger
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    PHPFrance Index du Forum -> PHP5 Toutes les heures sont au format GMT + 2 Heures
Page 1 sur 1

 
Sauter vers:  
Vous pouvez poster de nouveaux sujets dans ce forum
Vous pouvez répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum
Powered by phpBB © phpBB Group - PHPFrance est hébergé par Sivit