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

  FORUM HardWare.fr
  Programmation
  PHP

  while et for sur tableau

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

while et for sur tableau

n°2120686
nougatine0​179
Posté le 11-01-2012 à 10:18:06  profilanswer
 

Bonjour à tous,
Voila mon problème:
je dois créer un tableau en utilisant une boucle while et ensuite une boucle for (pour tester la difference d'utilisation entre les deux, il s'agit d'un exo).
J'ai donc adapté mon code ac while pour la boucle for et là j'ai un message d'erreur :
Parse error: syntax error, unexpected T_WHILE
 
<?php
// DECLARATION TABLEAU + UTILISATION DE WHILE
$tableau = array(1, 1, 2, 3, 5, 8, 13);
 
$i=0;  
 
while($i<count($tableau))
{  
  echo $tableau[$i] . '<br />';  
  $i++;  
}  
?>
 
<?php
// DECLARATION TABLEAU + UTILISATION DE FOR
$tableau=array(1,2,3,4,5,6,7);
for($i=0;$i<count($tableau);$i++)
{ echo $tableau[$i].'<br/>';}
?>

mood
Publicité
Posté le 11-01-2012 à 10:18:06  profilanswer
 

n°2120749
ericvoilie​r
Posté le 11-01-2012 à 13:59:51  profilanswer
 

Ton code est juste. Chez moi il tourne parfaitement.


---------------
Je ne donne que des pistes. A chacun de les travailler. creation de sites internet
n°2120751
nougatine0​179
Posté le 11-01-2012 à 14:03:56  profilanswer
 

ah ben alors je suis complètement à la masse moi.
J'ai vérifié pourtant moult fois et kedal
Désolé pour le dérangement , je m'en vais de ce pas vérifier de mon côté pourquoi cela ne fonctionne pas chez moi
Merci eric

n°2120753
rufo
Pas me confondre avec Lycos!
Posté le 11-01-2012 à 14:09:27  profilanswer
 

Petite remarque : éviter de mettre le count dans le while et le for mais plutôt le mettre avant et stocker le résultat dans une variable parce qu'il me semble que le count sera réévaluer à chaque tour de boucle. Sur un petit tableau, pas de pb mais sur un gros, ça peut être pénalisant... ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2120755
nougatine0​179
Posté le 11-01-2012 à 14:17:32  profilanswer
 

effectivement remarque intéressante.
Je pensais ne pas pouvoir déclarer de variable avant le for, bêtement.  
Donc du coup j'y suis allé à la brutor

n°2120917
pop-pan
yay!
Posté le 12-01-2012 à 01:36:01  profilanswer
 

pour le for tu as aussi la syntaxe suivante qui est valide :

Code :
  1. for ($i=0,$j=count($tableau);$i<$j;echo $tableau[$i].'<br/>',$i++);
  2. ou
  3. for ($i=0,$j=count($tableau);$i<$j;echo $tableau[$i].'<br/>',$i++){
  4.     //la tu peux faire un truc AVANT l'execution de echo "$tableau[$i].'<br/>',$i++"
  5. }


 
3 expressions separées par des ";"soient :
- condition de depart evalué 1 fois
- condition de test evalué a chaque fois
- instructions executé a chaque fin de boucle
a noter que "," sert de separateur de "sous expressions"
 
c'est un peu illisible comme ca mais on s'y fait tres bien, en général je reserve "$i" et "$ii" pour pas avoir de probleme de boucles imbriquées.
ca semble servir a rien de lancer des commandes a la fin mais dans des cas comme afficher des retours a la ligne c'est assez pratique genre
 

Code :
  1. for ($i=0,$ii=count($tableau);$i<$ii;echo '<br/>',$i++){
  2.     echo $tableau[$i];
  3. }


 
ce qui permet de degager du code parasite de la lecture


---------------
Plop !
n°2120932
rufo
Pas me confondre avec Lycos!
Posté le 12-01-2012 à 09:56:04  profilanswer
 

Je ne connaissais pas cette syntaxe. Intéressant...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2121034
MEI
|DarthPingoo(tm)|
Posté le 12-01-2012 à 16:52:23  profilanswer
 

pop-pan a écrit :

pour le for tu as aussi la syntaxe suivante qui est valide :

Code :
  1. for ($i=0,$j=count($tableau);$i<$j;echo $tableau[$i].'<br/>',$i++);
  2. ou
  3. for ($i=0,$j=count($tableau);$i<$j;echo $tableau[$i].'<br/>',$i++){
  4.     //la tu peux faire un truc AVANT l'execution de echo "$tableau[$i].'<br/>',$i++"
  5. }


 
3 expressions separées par des ";"soient :
- condition de depart evalué 1 fois
- condition de test evalué a chaque fois
- instructions executé a chaque fin de boucle
a noter que "," sert de separateur de "sous expressions"
 
c'est un peu illisible comme ca mais on s'y fait tres bien, en général je reserve "$i" et "$ii" pour pas avoir de probleme de boucles imbriquées.
ca semble servir a rien de lancer des commandes a la fin mais dans des cas comme afficher des retours a la ligne c'est assez pratique genre
 

Code :
  1. for ($i=0,$ii=count($tableau);$i<$ii;echo '<br/>',$i++){
  2.     echo $tableau[$i];
  3. }


 
ce qui permet de degager du code parasite de la lecture


 
C'est syntaxiquement OK, mais à proscrire, ce n'est pas de la programmation ça, mais du code de merde clairement, pas maintenable dans la longueur, tout ça pour gagner quelques lignes... super... :o
 
Sérieusement, s'il veut avoir quelque chose avant le echo, soit il fait un do...while (même si ce n'est pas recommandé non plus en général pour avoir un code clair), soit plus simple il fait un if ($i !== 1), ça peut paraitre laid, mais c'est rapidement compréhensible par quiquonque.


---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
n°2121107
pop-pan
yay!
Posté le 12-01-2012 à 23:24:49  profilanswer
 

houla t'excites pas :) c'est simplement pour montrer que la syntaxe existe et peut etre rencontrée (souvent dans les libs javascript d'ailleurs)
 
c'est pratique dans certains cas et je trouve ca largement moins horrible que des lignes ou les variables php ne sont pas proprement concaténées ou des boucles for avec des break bien violent planqués dans 200 lignes non indentées.
 
c'est comme tous les patterns de code qu'on apprend a reperer rapidement ou des regex avec moults backreferences.
 
en meme temps j'utilise tres rarement "for" aujourd'hui en php, je prefere tres largement "foreach" et encore la dessus on peut trouver a redire car comme tout le monde j'ai mes preferences.
 
je prefere toujours

Code :
  1. foreach($collection as &$element){
  2. // code
  3. }


 
a  
 

Code :
  1. foreach($collection as &$element):
  2. // code
  3. endforeach;


 
meme si je n'ai aucun argument pour si ce n'est la force de l'habitude car clairement la seconde syntaxe est plus explicite et lisible.


---------------
Plop !
n°2121182
GordonF_69
Posté le 13-01-2012 à 14:41:24  profilanswer
 

Fait pour l'occasion :
 
[:gordonf_69:5]

mood
Publicité
Posté le 13-01-2012 à 14:41:24  profilanswer
 

n°2121200
pop-pan
yay!
Posté le 13-01-2012 à 16:15:40  profilanswer
 

boarf, en meme temps je peux comprendre, a chaque gros proj auxquel j'ai participé une des premieres session de groupe c'etait toujours code convention.
 
apres je peux passer sur du code et dire que c'est de la merde de que ca respecte pas les normes que j'utilise par defaut :
- pas > 70 caracteres/ligne
- pas plus de 25 lignes par fonction/methode => force implicitement les accolades ouvrantes en fin de ligne
- accolades obligatoires meme si le "if" contient qu'une seule ligne par exemple
- lettercase et pas delimiter
- affectations tabulées pour ameliorer la lisibilité
- "_" pour commencer toutes les privates
- utilisations de references et pas de recopies si ca sert a rien (en java et C c'est pas applicable)
- iterators des que possible
... et plein d'autres
 
le pire c'est que j'en connais qui bloquent si c'est pas en hungarian... ce que je peux comprendre des qu'il y a typage fort
 
alors un mec qui m'annonce que mon code est crade parce qu'il ne respecte pas SA norme ca me fait doucement rigoler, on est pas la pour faire les ayatollah mais pour montrer au gens ce qui est faisable.
 
de plus selon les languages et la facon dont on s'en sert on code pas de la meme facon, ne serait ce qu'en php on code/optimise pas exactement pareil si on sait que ca va etre compilé ou aller dans un scripts cache.


Message édité par pop-pan le 13-01-2012 à 16:23:44

---------------
Plop !
n°2121330
raskt
Posté le 14-01-2012 à 15:59:10  profilanswer
 

tu mets pas un unset après le foreach en assignant dans une référence ?
Perso, je trouve que ça évite les mauvaises surprises même si c'est un peu lourd.
 
Exemple:

Code :
  1. <?php
  2. $a = array(1,2,3);
  3. foreach($a as &$e) {
  4.         print $e;
  5. }
  6. $e = 100;
  7. var_dump($a);
  8. ?>
  9. ^Z
  10. 123array(3) {
  11.   [0]=>
  12.   int(1)
  13.   [1]=>
  14.   int(2)
  15.   [2]=>
  16.   &int(100)
  17. }

Message cité 1 fois
Message édité par raskt le 14-01-2012 à 16:02:32
n°2121340
MEI
|DarthPingoo(tm)|
Posté le 14-01-2012 à 16:45:08  profilanswer
 

raskt a écrit :

tu mets pas un unset après le foreach en assignant dans une référence ?
Perso, je trouve que ça évite les mauvaises surprises même si c'est un peu lourd.
 
Exemple:

Code :
  1. <?php
  2. $a = array(1,2,3);
  3. foreach($a as &$e) {
  4.         print $e;
  5. }
  6. $e = 100;
  7. var_dump($a);
  8. ?>
  9. ^Z
  10. 123array(3) {
  11.   [0]=>
  12.   int(1)
  13.   [1]=>
  14.   int(2)
  15.   [2]=>
  16.   &int(100)
  17. }



Bah déjà, on ne fait pas de foreach avec une référence si on ne veux faire que de la lecture (d'autant que pour un int/float, la référence faisant la même taille, c'est aussi rapide de renvoyer l'int que la référence, pour un char c'est plus long car un char ne fait que 8 bits et la référence 32/64 bits, pour un objet/array c'est déjà une référence, en fait seul les string profiterais de cette syntaxe point de vue perf./RAM).
 
Après, clairement c'est un pb de PHP que d'avoir un scope de variable pas terriblement géré, car référence ou pas, si l'interpréteur était propre, vu que $e est déclaré dans le scope du foreach, il ne devrait pas être accessible hors du foreach. :'(


---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |

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

  while et for sur tableau

 

Sujets relatifs
Python - Ajout d'éléments dans un tableau de dimension >2[Excel] tableau à "2 colonnes"
[PERL] Supprimer valeure d'un tableau contenant des hash[PERL] plusieurs tie(tableau)
[algo] Toutes les combinaisons d'un tableau à 2 dimensions?remplissage d'un tableau avec une boucle while
Afficher les données d'un tableau avec whileConstruction d'un tableau dans une boucle while
pb while dans tableau - Débutantfaire un while, et afficher sous forme de tableau
Plus de sujets relatifs à : while et for sur tableau


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