[php] boucle for : byzar, vous avez dit byzar

Fermé
blbg Messages postés 302 Date d'inscription mercredi 9 avril 2003 Statut Membre Dernière intervention 22 novembre 2007 - 25 mai 2003 à 16:32
 BooGee'S - 18 déc. 2006 à 15:03
bonjour,

je voulais faire en php une petite boucle toute simple, pour afficher tte les lettres de l'alphabet en majuscule :

donc j'ai fait :
<?
for ($i='A';$i<='Z';$i++) { echo " $i"; }
?>

& voila ce que ça a donné :
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR AS AT AU AV AW AX AY AZ BA BB BC BD BE BF BG BH BI BJ BK BL BM BN BO BP BQ BR BS BT BU BV BW BX BY BZ CA CB CC CD CE CF CG CH CI CJ CK CL CM CN CO CP CQ CR CS CT CU CV CW CX CY CZ DA DB DC DD DE DF DG DH DI DJ DK DL DM DN DO DP DQ DR DS DT DU DV DW DX DY DZ EA EB EC ED EE EF EG EH EI EJ EK EL EM EN EO EP EQ ER ES ET EU EV EW EX EY EZ FA FB FC FD FE FF FG FH FI FJ FK FL FM FN FO FP FQ FR FS FT FU FV FW FX FY FZ GA GB GC GD GE GF GG GH GI GJ GK GL GM GN GO GP GQ GR GS GT GU GV GW GX GY GZ HA HB HC HD HE HF HG HH HI HJ HK HL HM HN HO HP HQ HR HS HT HU HV HW HX HY HZ IA IB IC ID IE IF IG IH II IJ IK IL IM IN IO IP IQ IR IS IT IU IV IW IX IY IZ JA JB JC JD JE JF JG JH JI JJ JK JL JM JN JO JP JQ JR JS JT JU JV JW JX JY JZ KA KB KC KD KE KF KG KH KI KJ KK KL KM KN KO KP KQ KR KS KT KU KV KW KX KY KZ LA LB LC LD LE LF LG LH LI LJ LK LL LM LN LO LP LQ LR LS LT LU LV LW LX LY LZ MA MB MC MD ME MF MG MH MI MJ MK ML MM MN MO MP MQ MR MS MT MU MV MW MX MY MZ NA NB NC ND NE NF NG NH NI NJ NK NL NM NN NO NP NQ NR NS NT NU NV NW NX NY NZ OA OB OC OD OE OF OG OH OI OJ OK OL OM ON OO OP OQ OR OS OT OU OV OW OX OY OZ PA PB PC PD PE PF PG PH PI PJ PK PL PM PN PO PP PQ PR PS PT PU PV PW PX PY PZ QA QB QC QD QE QF QG QH QI QJ QK QL QM QN QO QP QQ QR QS QT QU QV QW QX QY QZ RA RB RC RD RE RF RG RH RI RJ RK RL RM RN RO RP RQ RR RS RT RU RV RW RX RY RZ SA SB SC SD SE SF SG SH SI SJ SK SL SM SN SO SP SQ SR SS ST SU SV SW SX SY SZ TA TB TC TD TE TF TG TH TI TJ TK TL TM TN TO TP TQ TR TS TT TU TV TW TX TY TZ UA UB UC UD UE UF UG UH UI UJ UK UL UM UN UO UP UQ UR US UT UU UV UW UX UY UZ VA VB VC VD VE VF VG VH VI VJ VK VL VM VN VO VP VQ VR VS VT VU VV VW VX VY VZ WA WB WC WD WE WF WG WH WI WJ WK WL WM WN WO WP WQ WR WS WT WU WV WW WX WY WZ XA XB XC XD XE XF XG XH XI XJ XK XL XM XN XO XP XQ XR XS XT XU XV XW XX XY XZ YA YB YC YD YE YF YG YH YI YJ YK YL YM YN YO YP YQ YR YS YT YU YV YW YX YY YZ

cool ..........
& forcémént si je fait :
<?
for ($i='A';$i<'Z';$i++) { echo " $i"; }
?>
il manque le " Z "
alor comment faire ???
merci ....

( ne dite pas qu'il serait + simple de toutes les marquer comme ça,
car c'est pour choisir une lettre, donc je vais mettre un lien pour chaque lettre, & comme c'est un projet .... d'école, si je fait ça ... il vont rire !! les profs .. lol !! )

++ blbg
A voir également:

17 réponses

PhP Messages postés 1770 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
25 mai 2003 à 18:15
Bsr blbg,

Si je me réfère à la doc PHP :


PHP suit les conventions de Perl pour la gestion des opérateurs arithmétiques, et non pas celles du lanage C. Par exemple, en Perl 'Z'+1 devient 'AA', tandis que en langage C 'Z'+1 devient '[' ({ ord('Z') == 90, ord('[') == 91 ).

Exemple 8-2. Opérations arithmétiques et caractères

<?php
$i = 'W';
for($n=0; $n<6; $n++)
echo ++$i . "\n";

/*
Affiche ceci :

X
Y
Z
AA
AB
AC

*/
?>


Dixit la doc ...

Donc le moyen le plus sûr est d'utiliser une variable numérique :
Par ex :

<?php
for ($i=ord('A'); $i <= ord('Z'); $i++)
{
echo chr($i)."<br>";
}
?>

@+
PhP

[[  The Truth is Out There   ]]
2
blbg Messages postés 302 Date d'inscription mercredi 9 avril 2003 Statut Membre Dernière intervention 22 novembre 2007 10
25 mai 2003 à 18:25
ok merci php .....
décidément tu est toujours là qd il faut !!
pr cette partie de la doc, je m'en souvenais pas ( je l'ai lue entierement sur ccm, & maintenant, je survol ce qui m'intéresse, mais je ne l'ai pas revue .... )

sinon .... ça devait être parce que tu écrivais, j'ai testé avec les chiffre ( merci la transmission de pencée !! lol )

mais pourtant y'a un truc que je comprend pas encore :
avec $i<=Z, je vais jusqu'a Z alors même si Z+1= AA , pourquoi il me les affiche ??

& encore merci !!
0
Sardino Messages postés 381 Date d'inscription lundi 5 mai 2003 Statut Membre Dernière intervention 25 juin 2003 7
25 mai 2003 à 17:04
Salut !

Il est vrai que le langage PhP n'est pas réellement typé, mais tout de même :-)
Essaye ça :
<?
for ($i='65';$i<='90';$i++) {
echo chr($i)." ";
}
?>
Ca traduit la table ASCII... (65=A, et 90=Z)

@+@tous !

[ Méfiez-vous des filets dérivants de la vie... ]
1
Sardino Messages postés 381 Date d'inscription lundi 5 mai 2003 Statut Membre Dernière intervention 25 juin 2003 7
25 mai 2003 à 17:08
Un petit lien vers la table ASCII : (recherche google)
http://thomas.vivet.free.fr/ascii.html

Comme ça, si tu veux passer aux minuscules ;-)

re@+@tous !

[ Méfiez-vous des filets dérivants de la vie... ]
0
blbg Messages postés 302 Date d'inscription mercredi 9 avril 2003 Statut Membre Dernière intervention 22 novembre 2007 10
25 mai 2003 à 18:16
J'AI TROUVÉ UN TRUC QUI MARCHE !!!!!!

mais qui est pas trés propre ..... lol

for($i=0;$i<26;$i++) { echo '<a href=\'etudiant.php3?n='.chr($i+65).'\' target=\'liste\'>'.chr($i+65).'</a> '; }

mais ça marche !!!!!! :o))))))
enfin .... si vous trouver une solution un peu meilleure, ......
prevenez moi ....... lol

merci ....
1
j'y connais rien en PHP mais tu peux pas poser une condition sur le nombre de lettre et utiliser un "tant que "??
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
blbg Messages postés 302 Date d'inscription mercredi 9 avril 2003 Statut Membre Dernière intervention 22 novembre 2007 10
25 mai 2003 à 16:55
dje ...... je sais pas, mais à mon avis, il y a un beug ...
car normalement ( cf les cours, & aussi, la logique ... ) ça doit afficher $i pour toute les valeur, ( de A à Z ) ms pas 2 fois de suite ... :o(((((

sinon, j'ai comme je l'ai dit, c'était pour y attacher des liens, j'ai tenter, ça ma fait un autre beug....
& j'ai tenter avec une boucle while :
$i='A';
while($i<='Z')
{
echo '<a href=\'etudiant.php3?n='.$i.'> '.$i.'</a>';
$i++;
}

& voila ce que ça donne ..... re cool ..... ( avec les liens bien sur !! )
B D F H J L N P R T V X Z AB AD AF AH AJ AL AN AP AR AT AV AX AZ BB BD BF BH BJ BL BN BP BR BT BV BX BZ CB CD CF CH CJ CL CN CP CR CT CV CX CZ DB DD DF DH DJ DL DN DP DR DT DV DX DZ EB ED EF EH EJ EL EN EP ER ET EV EX EZ FB FD FF FH FJ FL FN FP FR FT FV FX FZ GB GD GF GH GJ GL GN GP GR GT GV GX GZ HB HD HF HH HJ HL HN HP HR HT HV HX HZ IB ID IF IH IJ IL IN IP IR IT IV IX IZ JB JD JF JH JJ JL JN JP JR JT JV JX JZ KB KD KF KH KJ KL KN KP KR KT KV KX KZ LB LD LF LH LJ LL LN LP LR LT LV LX LZ MB MD MF MH MJ ML MN MP MR MT MV MX MZ NB ND NF NH NJ NL NN NP NR NT NV NX NZ OB OD OF OH OJ OL ON OP OR OT OV OX OZ PB PD PF PH PJ PL PN PP PR PT PV PX PZ QB QD QF QH QJ QL QN QP QR QT QV QX QZ RB RD RF RH RJ RL RN RP RR RT RV RX RZ SB SD SF SH SJ SL SN SP SR ST SV SX SZ TB TD TF TH TJ TL TN TP TR TT TV TX TZ UB UD UF UH UJ UL UN UP UR UT UV UX UZ VB VD VF VH VJ VL VN VP VR VT VV VX VZ WB WD WF WH WJ WL WN WP WR WT WV WX WZ XB XD XF XH XJ XL XN XP XR XT XV XX XZ YB YD YF YH YJ YL YN YP YR YT YV YX YZ


enfin voila .....
0
blbg Messages postés 302 Date d'inscription mercredi 9 avril 2003 Statut Membre Dernière intervention 22 novembre 2007 10
25 mai 2003 à 17:32
c'est encore moi...
j'ai testé en passant par le code ASCII .....

$i='65';
while($i<='90')
{
echo '<a href=\'etudiant.php3?n='.chr($i).'> '.chr($i).'</a>';
$i++;
}

et il m'affiche ça :

B D F H J L N P R T V X Z

j'en ai marrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr !!!
c'est avc des connries toutes simples qu'on merde ...

dslé ... ms ça me fait rire en même tps... lol ... planter ... sur un simple affichage de l'alphabet ......

mais bon , si vous savez ce qui ne va pas, .....
vous pouvez me dire koi ......
( j'trouverais d'autre raisons pour rire !! )
0
Sardino Messages postés 381 Date d'inscription lundi 5 mai 2003 Statut Membre Dernière intervention 25 juin 2003 7
25 mai 2003 à 17:46
Re' !

En tout cas, essaye plutôt avec for...

Regarde le code HTML généré avec ta solution :


href='etudiant.php3?n=A> A</a><a href='etudiant.php3?n=B> B</a><a href='etudiant.php3?n=C> C</a><a href='etudiant.php3?n=D> D</a><a href='etudiant.php3?n=E> E</a><a href='etudiant.php3?n=F> F</a><a href='etudiant.php3?n=G> G</a><a href='etudiant.php3?n=H> H</a><a href='etudiant.php3?n=I> I</a><a href='etudiant.php3?n=J> J</a><a href='etudiant.php3?n=K> K</a><a href='etudiant.php3?n=L> L</a><a href='etudiant.php3?n=M> M</a><a href='etudiant.php3?n=N> N</a><a href='etudiant.php3?n=O> O</a><a href='etudiant.php3?n=P> P</a><a href='etudiant.php3?n=Q> Q</a><a href='etudiant.php3?n=R> R</a><a href='etudiant.php3?n=S> S</a><a href='etudiant.php3?n=T> T</a><a href='etudiant.php3?n=U> U</a><a href='etudiant.php3?n=V> V</a><a href='etudiant.php3?n=W> W</a><a href='etudiant.php3?n=X> X</a><a href='etudiant.php3?n=Y> Y</a><a href='etudiant.php3?n=Z> Z</a>

Je crois que tu as oublié de fermer ton adresse de référence par un \' !!!

Et alors, têtenlair !!! ;-)

@+

[ Méfiez-vous des filets dérivants de la vie... ]
0
blbg Messages postés 302 Date d'inscription mercredi 9 avril 2003 Statut Membre Dernière intervention 22 novembre 2007 10
25 mai 2003 à 18:04
effectivement, je l'avais oublier, je m'en suit rendu compte juste aprés avoir posté le message :o)

dc pour récapituler :

for($i=A;$i<Z;$i++) { echo '<a href=\'etudiant.php3?n='.$i.'\' target=\'liste\'>'.$i.'</a> '; }

marche trés bien, ... il manque juste le "Z"

& si j'ajoute " $i<=Z " pour avoir aussi le Z , ça beug:
ça va de " A " à " YZ " ....... snifff !!
0
dohm Messages postés 975 Date d'inscription samedi 1 mars 2003 Statut Modérateur Dernière intervention 13 avril 2010 67
25 mai 2003 à 18:13
T'as qu'à le rajouter à la main avec une balise en dur !

Et ils n'yverront que du feu !! héhé

Dohm qui vous bouleg tous
0
Marden Messages postés 1072 Date d'inscription dimanche 11 février 2001 Statut Membre Dernière intervention 29 janvier 2006 210
25 mai 2003 à 18:38
Je ne connais pas le PHP, mais par analogie avec le JS, je suggèrerais d'utiliser :
$alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
for ( $i = 0 ; $i < 26 ; $i++ ) {
..... $lettre = $alphabet.charAt($i) ;
..... xxxxxxxxxx
}

A titre d'exemple, j'utilise une fonction .js pour composer un menu où la lettre courante est d'une taille différente de celles qui servent de liens (les lettres non accessibles - en minuscules - sont repérées par une marque particulière dans une table parallèle à "alphabet")
voir : http://ardenneaparis.free.fr/ardPatois/A.html
0
PhP Messages postés 1770 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
25 mai 2003 à 19:19
si tu écris :

for ($i='A'; $i <='Z' ; $i++) { ... }

$i prend toutes les valeurs comprises entre 'A' et 'Z'.

Après 'Z', $i devient 'AA' (le truc bizarre ...) or par définition 'AA' est inférieure à 'Z' donc la boucle continue et ce jusqu'à 'YZ' car toute chaîne commencant par autre chose qu'un 'Z' est aussi inférieure à 'Z'

Ensuite $i devient 'ZZ' or 'ZZ' est strictement supérieure à 'Z' donc on sort de la boucle


@+
PhP
[[  The Truth is Out There   ]]
0
blbg Messages postés 302 Date d'inscription mercredi 9 avril 2003 Statut Membre Dernière intervention 22 novembre 2007 10
25 mai 2003 à 19:55
aaaaaaaaaaaaa ben ok ....
il sont byzar les créateur de php ....... car ...
faut le trouver que AA < Z .... lol .... ( c'est pas trés logique car AA à déjà plus de lettres, ... mais bon il doit y avoir des raisons .. intéressantes, pour programmer des truc plus compliqués que l'affichage d'un alphabet !! lol )

donc effectivement, là ...... je comptrend pourquoi ... !!!!

merci .... php .... tu est vraiment incolable ....
encore une fois ... je te dit merci .... ++
0
lagassat Messages postés 527 Date d'inscription jeudi 22 mai 2003 Statut Membre Dernière intervention 6 septembre 2004 80
25 mai 2003 à 21:17
Salut,

Bah je sais pas sic bon mais moi je ferai ca... Mais je sias que le lien crée est bon, mais je sais pas si on va pouvoir recuperer le parametre passé dans l'url. A tester...

<?
for ($i='65';$i<='90';$i++)
{
?>
<a href=\'etudiant.php3?n=<? echo chr($i); ?> >
<?

echo chr($i);
?>
</A>
<?

}
?>

J'espere que ca pourra t'aider.
Ciao
"2 choses sont infinies : l'univers et la betise humaine
bien que en ce qui concerne la 1ere je n'ai pas encore de certitude absolue"
0
PhP Messages postés 1770 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
26 mai 2003 à 00:08
Autant le coup du 'Z' +1 = 'AA' est plutôt inattendu, autant le fait que AA < Z me parait naturel ...

Ce principe respecte simplement l'ordre des lettres de notre alphabet (qui varie d'ailleurs d'une langue à une autre) et qui veut que par convention la lettre A arrive avant la lettre Z.

L'ordinateur peut ainsi trier et d'ordonner des chaînes de caractères comme nous le faisons.

Lorsque tu classes tes livres ou bien encore tes CD favoris par titre dans l'ordre alphabétique tu t'y prends exactement de la même manière ! Ainsi tous les titres qui commencent par 'A' arrivent en premier et ce quelquesoit la longueur du titre .

Non, là où ca se corse c'est avec le distinction majuscule/minuscule ou encore avec nos chers caractères accentués ;-)


@+
PhP
[[  The Truth is Out There   ]]
0
blbg Messages postés 302 Date d'inscription mercredi 9 avril 2003 Statut Membre Dernière intervention 22 novembre 2007 10
26 mai 2003 à 00:42
oui ... vue de cette façon .... c'est vraie .... que ....
mais moi , en fait c'était au point de vue global du mot que je trouvais ça bizard .... par rapport à la longeur car ça nous donne qd même que :
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa < z
lol ..... mais bon, par c'est vrai que par ordre alphabétique pur ...

sinon j'ai un autre probléme qui a tjs rapport avec les lettres ...
je récupére, la premiére lettre d'un nom, ( qui a servit pour une recherche par nom ds une liste) et je veux afficher un lien sur la lettre suivante & précédente ( si c'est possible )

quand je clic directement sur une lettre ( cf les liens que j'ai eu tant de mal à faire ) ça va, j'arive à naviguer parmis toutes les lettre
mais qd je rentre une chaine de charactére, ... ça marche plus ...
bien entendu, j'ai concerver que la premiére lettre de la chaine .... mais ça ne m'affiche que le lien sur la lettre suivante ....

comment ça se fait ???
il y a la source ... là :
http://www.commentcamarche.net/forum/affich.php3?cat=3&ID=301424&page=1

décidément .... je n'ai pas de chance avec les caractére aujourd'hui !!
++ blbg
0
asevere Messages postés 13084 Date d'inscription lundi 28 janvier 2002 Statut Webmaster Dernière intervention 23 novembre 2024 426
26 mai 2003 à 00:34
Bon soir...

bon je vais peut etre dire une connerie, mais, dans tout les exemple donnés au dessus avaec les val ascii, il y a un truc qui me gene un peu...

pourquoi des guillemets pour $i entier ? c'est bien le delimiteur de caractére dc il ne devrait pas y en avoir ici...

for ($i='65';$i<='90';$i++) => for($i=65; $i<=90; $i++)
non ?

en tout cas voila deux exemples sans artifices qui fonctionnent:

-1
for($i=65; $i<=90; $i++)
echo chr($i);

-2
for($i=65; $i<=90; $i++)
printf("%c ",$i);
qui me parait plus lisible quand tu fais tout ton truc...

ie: printf("<a href='etudiant.php3?n=%c'> %c</a>",$i,$i);

et le tour est joué... ;)

bonne soirée à tous...

Na kaer eo va Breizh,
gand ar mor glaz èn-dro dezi !
0
Sardino Messages postés 381 Date d'inscription lundi 5 mai 2003 Statut Membre Dernière intervention 25 juin 2003 7
26 mai 2003 à 09:00
Salut !

Oui, tu as raison, les guillemets sont inutiles. C'est une erreur de copier-coller en ce qui me concerne. :-)

@+

[ Méfiez-vous des filets dérivants de la vie... ]
0
teebo Messages postés 33491 Date d'inscription jeudi 14 octobre 2004 Statut Modérateur Dernière intervention 24 février 2011 1 793
26 mai 2003 à 09:05
Sinon tu peux au lieu de <=Z mettre <[ qui est le caracter suivant dans la table ASCII (je me refere au lien donne au dessus....)

.  .
\_/
0
Sardino Messages postés 381 Date d'inscription lundi 5 mai 2003 Statut Membre Dernière intervention 25 juin 2003 7
26 mai 2003 à 09:11
Salut Teebo !

Désolé, mais ta solution ne fonctionne pas. En effet, en PhP, $i++ ne passe pas à la valeur ASCII supérieure. Ainsi si $i="Z", $++ devient "AA".
En réalité, je ne comprends pas pourquoi l'utilisation de chr est jugée peu élégante par certains... Si quelqu'un pouvait m'expliquer...

@+ !

[ Méfiez-vous des filets dérivants de la vie... ]
0
teebo Messages postés 33491 Date d'inscription jeudi 14 octobre 2004 Statut Modérateur Dernière intervention 24 février 2011 1 793
26 mai 2003 à 09:23
Salut la sardine a l'huile :o)
OK, j'ai rien dit alors, mais je suis relativement d'accord que le code ASCII est plutot plus propre car il ne depend pas du langage alors que la logique de comparaison des lettres, et faire un i++ sur une chaine de characteres est pour le moins dependant du langage utilise...

.  .
\_/
0
Voila ca ca marche :

$alphabet=array(a,b,c,d,e,f,g,h,i,j,k,l,m);
foreach ($alphabet as $lettre) echo $lettre."<br/>";
0
Bonjour,

Le sujet date un peu mais il ne me semble pas avoir vu la réponse que je vais vous donner.

Voici une solution simple qui fonctionne très bien :

for ($i = 'A'; $i != 'AA'; $i++)
echo $i;

La boucle s'arrête à Z.
0