Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1605 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  for vs foreach en PHP

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

for vs foreach en PHP

n°622669
rufo
Pas me confondre avec Lycos!
Posté le 27-01-2004 à 12:06:23  profilanswer
 

Vrai ou faux? Pour parcourir les éléments d'un tableau for est plus rapide que foreach, qui pourtant, est prévues exprès pour les tableaux...
 
Moi, j'ai fait un test, et c'est ce que j'ai pu constater, a priori (c'est l'impression que j'en ai eu quand j'affiche les temps d'éxécution d'une page).

mood
Publicité
Posté le 27-01-2004 à 12:06:23  profilanswer
 

n°623004
naceroth
Posté le 27-01-2004 à 19:43:13  profilanswer
 

tout comme le while est plus rapide que le for :)
 
Fait exprès signifie souvent simplifié, pas optimisé :)

n°623242
KdZ'
Simple®
Posté le 27-01-2004 à 23:15:54  profilanswer
 

Ah bon le while est plus rapide ?  [:figti]


---------------
GENERATION MOBILES : Imprimantes GSM & logos/sonneries/jeux
n°623262
naceroth
Posté le 27-01-2004 à 23:31:48  profilanswer
 

C'est pas flagrant et ça dépend beaucoup de la manière dont il est écrit.
 
Pour te donner une idée, voilà les résultats d'un bench sur un tableau de 10000 éléments (oui, quand même :D)
 

  • boucle For avec calcul de la taille hors de la boucle  

Résultat : 20000 temps d'exécution : 0.017132

  • boucle For avec calcul de la taille dans la boucle  

Résultat : 20000 temps d'exécution : 0.022836

  • boucle While avec instruction each  

Résultat : 20000 temps d'exécution : 0.035938

  • boucle Foreach  

Résultat : 20000 temps d'exécution : 0.020736

  • boucle While classique, calcul de la longueur hors boucle  

Résultat : 20000 temps d'exécution : 0.016767
 
C'est vraiment pas énorme entre le while et le for donc :)


Message édité par naceroth le 27-01-2004 à 23:32:43
n°623523
rufo
Pas me confondre avec Lycos!
Posté le 28-01-2004 à 09:42:02  profilanswer
 

D'où ma 2ème question : quel est l'intérêt de foreach poir les tableaux par rapport à un bon vieux  

Code :
  1. for($i = 0 ; $i < count($tab) ; $i++)
  2. {
  3.     $tab[$i];
  4. }

n°623579
bboben
Posté le 28-01-2004 à 10:43:04  profilanswer
 

interet: pour les tableau associatif: array("couleur" => "rouge", "type"=>"blabla" )

n°623740
rufo
Pas me confondre avec Lycos!
Posté le 28-01-2004 à 13:30:16  profilanswer
 

oui, pourquoi pas, ça se défend...

n°623746
impulse
Posté le 28-01-2004 à 13:38:49  profilanswer
 

Pourquoi faire compliqué quand on peut faire simple? Vu la difference de perfs minime je prefere utiliser le foreach. Je trouve ça bcp plus lisible.

n°623751
rufo
Pas me confondre avec Lycos!
Posté le 28-01-2004 à 13:41:27  profilanswer
 

impulse a écrit :

Pourquoi faire compliqué quand on peut faire simple? Vu la difference de perfs minime je prefere utiliser le foreach. Je trouve ça bcp plus lisible.


 
C'est ce que j'ai fait, bien que ayant fait pas mal de C, je suis assez habitué au for(i =...)

n°624029
naceroth
Posté le 28-01-2004 à 17:01:11  profilanswer
 

rufo a écrit :

D'où ma 2ème question : quel est l'intérêt de foreach poir les tableaux par rapport à un bon vieux  

Code :
  1. for($i = 0 ; $i < count($tab) ; $i++)
  2. {
  3.     $tab[$i];
  4. }




 
Remarque, tant qu'à optimiser, le count devrait être hors de la boucle for :D
 
Ceci dit, c'est juste une question de simplicité et de goût :)

mood
Publicité
Posté le 28-01-2004 à 17:01:11  profilanswer
 

n°624034
simogeo
j'ai jamais tué de chats, ...
Posté le 28-01-2004 à 17:03:09  profilanswer
 

j'adore ces concours de branlette de code pour gagner 0.0000004 s [:zytrahus5]


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
n°624567
rufo
Pas me confondre avec Lycos!
Posté le 29-01-2004 à 09:47:00  profilanswer
 

naceroth a écrit :


 
Remarque, tant qu'à optimiser, le count devrait être hors de la boucle for :D
 
Ceci dit, c'est juste une question de simplicité et de goût :)


 
oui, t'as raison, une simple erreur de ma part ; c'est ce que je fais, naturellement

n°624569
rufo
Pas me confondre avec Lycos!
Posté le 29-01-2004 à 09:48:03  profilanswer
 

simogeo a écrit :

j'adore ces concours de branlette de code pour gagner 0.0000004 s [:zytrahus5]


 
non, c'est juste une question de curiosité. Et puis, quand y'a pleins de personnes connectés en simultanné sur ton serveur, ces optimisations peuvent s'avérer utilent :)

n°629133
aspegic500​mg
Posté le 03-02-2004 à 00:07:15  profilanswer
 

utiles [:aloy]
 
 
Un foreach, à l'inverse d'une boucle for, ne modifie pas le contenu du tableau qu'elle parcoure, exemple:

Code :
  1. <?php
  2. $tablo = array(25,36,10,5);
  3. foreach($tablo as $var)
  4. {
  5.    $var = 0;
  6. }
  7. printf $tablo;
  8. ?>

(désolé pour les erreurs de syntaxe dans le code, j'ai la flemme de vérifier :o )
 
==> le tablo est toujours avec ses valeurs d'origine, donc un foreach ne peut etre utilisé qu'en lecture car il ne travaille pas directement sur le tableau, alors qu'avec un while/for on fait ce qu'on veut.


Message édité par aspegic500mg le 03-02-2004 à 00:08:07
n°629165
Hermes le ​Messager
Breton Quiétiste
Posté le 03-02-2004 à 01:11:44  profilanswer
 

simogeo a écrit :

j'adore ces concours de branlette de code pour gagner 0.0000004 s [:zytrahus5]


 
en même temps, c'est instructif et c'est toujours bien de chercher à tendre vers la perfection, quelque soit le domaine.  ;)

n°629871
rufo
Pas me confondre avec Lycos!
Posté le 03-02-2004 à 16:20:16  profilanswer
 

aspegic500mg a écrit :

utiles [:aloy]
 
 
Un foreach, à l'inverse d'une boucle for, ne modifie pas le contenu du tableau qu'elle parcoure, exemple:

Code :
  1. <?php
  2. $tablo = array(25,36,10,5);
  3. foreach($tablo as $var)
  4. {
  5.    $var = 0;
  6. }
  7. printf $tablo;
  8. ?>

(désolé pour les erreurs de syntaxe dans le code, j'ai la flemme de vérifier :o )
 
==> le tablo est toujours avec ses valeurs d'origine, donc un foreach ne peut etre utilisé qu'en lecture car il ne travaille pas directement sur le tableau, alors qu'avec un while/for on fait ce qu'on veut.


 
La preuve que c'est instructif : personne jusqu'à présent n'avait parlé de ça!... Et ça pourrait être une source de bug pas facile à trouver pour celui qui n'est pas au courant que foreach ne travaille qu'en lecture sur des tableaux...

n°630005
aspegic500​mg
Posté le 03-02-2004 à 18:15:26  profilanswer
 

rufo a écrit :


 
La preuve que c'est instructif : personne jusqu'à présent n'avait parlé de ça!... Et ça pourrait être une source de bug pas facile à trouver pour celui qui n'est pas au courant que foreach ne travaille qu'en lecture sur des tableaux...


 
Ben oui on travaille sur la variable "$var" et non sur le contenu du tableau, ca parait logique mais quand on connait pas il est facile de faire l'erreur :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  for vs foreach en PHP

 

Sujets relatifs
[PHP] Faire un 'u' sur tous les champs d'une table[PHP] Page interprétée entièrement, pas d'output vers le browser
[PHP] Connexion à MySQLProteger son code PHP
[PHP] Convertir une ip en un INT...[PHP] Marrant ca : session_start() => Failed to init. storage module
Site Intranet en PHPgerer 2 bases mysql en PHP?
[PHP]Utilisation de foreach?[PHP] boucle foreach imbriquée dans un For
Plus de sujets relatifs à : for vs foreach en PHP


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR