CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Curiosité PHP

jomeo
jomeo
Niveau 13
23 avril 2004 à 12:19:44

for($c=´a´ ; $c < = ´z´ ; $c++) echo $c

Pourquoi ceci provoque l´affichage de toutes les lettres puis de tous les couples de lettre sans s´arreter logiquement à ´z´ ?

C´etait dans le but de répondre à cette question que j´ai voulu lancé un défi de programmation PHP, qui apparament n´a interessé personne.

jomeo
jomeo
Niveau 13
23 avril 2004 à 14:37:29

:question:

Espentor
Espentor
Niveau 6
23 avril 2004 à 14:57:03

Parce que la table ASCII fait partie des truc que tout langage un peu évolué connait et quand tu fais une opération sur des caractère, php bascule auto dessus.

jomeo
jomeo
Niveau 13
23 avril 2004 à 16:31:00

Je sais ce qu´est la table ASCII mais je ne vois pas le rapport... Si a=97 alors z=123 mais pourquoi il va au delà de 123 et passe à des comparaisons à 2 caractères ? ?

Pourquoi faut-il faire while($c ! = ´aa´) ? et non pas while($c < = ´z´) ? ?

J´aimerais une explication qui explique ce qui se passe clairement... ( personne n´a su expliquer là ou je pense, on a juste trouvé des solutions)

Yoda_Software
Yoda_Software
Niveau 30
23 avril 2004 à 16:47:35

Faire une boucle sur des caractères n´est pas vraiment conseillé, quel que soit le langage de programmation. Les résultats peuvent être incertains, ce qui est la cas ici.
N´importe quel bon programmeur te diras qu´une boucle se fait sur des valeurs numériques !

Essaye ça :
< ?php for ( $i=97;$i<=122;$i++) echo chr($i);?>

jomeo
jomeo
Niveau 13
23 avril 2004 à 16:55:49

On a fait ça... Ma question n´etait pas " comment le faire ? " puisqu´on y est arrivé... Mais plutot que se passe-t-il au moment de la comparaison entre ´z´ < = ´z´ pour la boucle for avec un compteur de type caractère pour que e résultat produit soit :

" a b c d . .. x y z aa ab ac . .. zx zy"

Yoda_Software
Yoda_Software
Niveau 30
23 avril 2004 à 17:02:54

Pourquoi le faire alors qu´on sait que le résultat est incertain ?
C´est un pb interne au PHP !

Blawk
Blawk
Niveau 10
23 avril 2004 à 17:15:57

Ca n´a rien d´un problème. En PHP, le type ´char´ n´existe pas. Un caractère EST une chaine. En C, ´char´ est le STRICT équivalent de ´int´ mais sur 1 octet.

Donc utiliser des opérateur de comparaison comme < = sur une chaine de caractère n´a aucun sens.

Yoda_Software
Yoda_Software
Niveau 30
23 avril 2004 à 17:42:45

Merci !
D´un côté j´apprends des choses et de l´autre celà conforte ce que je dit ! :ok:

jomeo
jomeo
Niveau 13
23 avril 2004 à 18:22:29

je suis ta logique blawk et je sais très bien qu´il ne faut pas utiliser un entier en tant que compteur de boucle... C´est juste que je suis curieux et j´aimerai bien comprendre pourquoi la boucle for ne se termine qu´à " zy" . ..

Rappel ( essayez chez vous):

for($c=´a´ ; $c < = ´z´ ; $c++) echo $c

Blawk
Blawk
Niveau 10
24 avril 2004 à 11:47:02

Bien que l´opérateur < = soit un non sens, PHP le traite quand même. ( Il lui donne un sens.)

Voilà comment fonctionne cet operateur: PHP compare les codes ASCII de chaque caractère 2 à 2 et s´arrète des que deux caractère sont différent. Il retourne alors la valeur de la comparaison de ce deux caractère. Si les deux chaines n´ont pas la même longueur, la plus petite est ramplie avec des \0 ( code ASCII zéro).

Ainsi:
. ´a´ < ´z´ # true
. ´aa´ < ´z´ # true
. ´ag´ < ´d´ # true
. ´z´ < = ´z´ # true
. ´za´ < = ´z´ # FALSE

Donc une chaine est plus grande que ´z´ si et seulement si son premier caractère est ´z´ et si elle comporte au moins deux caractère ( le second caractère sera forcément plus grand que zéro).

Comme après ´yz´ vient ´za´, la boucle s´arrète après avoir afficher ´yz´.

MathieuN7
MathieuN7
Niveau 10
24 avril 2004 à 15:44:33

:-)

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment