<?php
for ($i = 'a'; $i <= 'z'; $i++)
echo "$i\n";
Cet extrait donne la sortie suivante (les retours à la ligne sont remplacés par des espaces):
abcdefghijklmnopqrstu vwxyz 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 par 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 ... on to yz
$c = 'a';
le fait est qu'en C il y a un type de char (symbole de caractère 1), mais pas en PHP, si U dit à PHP$c = 'a';
- signifie que c'est une chaîne avec seulement 1 caractère. C'est pourquoi U ne peut pas boucler correctement 28 caractères en PHP. J'espère que chaque programmeur apprendra les langages de bas niveau et le typage fort avec lui, sans oublier les pratiques mathématiques, qui les aideront à être plus forts.==
ou!=
) consultez cette réponse à une question connexe .Réponses:
De la documentation :
Des commentaires: -
Il convient également de noter qu'il
<=
s'agit d'une comparaison lexicographique, donc'z'+1 ≤ 'z'
. (Depuis'z'+1 = 'aa' ≤ 'z'
. Mais'za' ≤ 'z'
c'est la première fois que la comparaison est fausse.) Rompre quand$i == 'z'
fonctionnerait, par exemple.Exemple ici .
la source
ord()
donc je ne l'ai jamais remarqué.'aa'
est plus petit que , c'est pourquoi la boucle continue. Et ça s'arrête parce que c'est plus grand que . Vérifiez cet exemple .'z'
'yz'
'za'
z
Parce qu'une fois que «z» est atteint (et que c'est un résultat valide dans votre plage, $ i ++ l'incrémente à la valeur suivante en séquence), la valeur suivante sera «aa»; et par ordre alphabétique, 'aa' est <'z', donc la comparaison n'est jamais rencontrée
la source
D'autres réponses expliquent le comportement observé du code publié. Voici une façon de faire ce que vous voulez (et c'est un code plus propre, IMO):
En réponse au commentaire / question de ShreevatsaR sur la fonction de plage : Oui, il produit le «point final droit», c'est-à-dire que les valeurs transmises à la fonction sont dans la plage. Pour illustrer, la sortie du code ci-dessus était:
la source
D'autres ont déjà expliqué pourquoi PHP ne montre pas ce que vous attendez. Voici comment vous obtenez le résultat souhaité:
la source
Pourquoi ne pas simplement utiliser
range('a','z')
?la source
Essayez ce code. Je pense que ce code vous sera utile.
Affichez 26 lettres en séquence.
la source
la source
Cela peut également être utilisé:
la source
PHP a la fonction de boucler les lettres et peut dépasser les simples caractères; le reste se fera de cette façon: aa ab ac ... zz, etc.
Essaye ça:
la source
Bien que les réponses ci-dessus donnent un aperçu de ce qui se passe et soient assez intéressantes (je ne savais pas que cela se comporterait comme ça, et c'est bien de voir pourquoi.
La solution la plus simple (mais peut-être pas la plus significative) serait simplement de changer la condition en $ i! = 'Z'
la source
Le PHP ne considère pas «AA» moins que «Z». La meilleure façon de procéder est:
abcdefghijklmnopqrstuvwxyz
la source
Peut-être que ce code fonctionnera. C'est facile et peut être compris:
où 26 est le nombre total de lettres de l'alphabet.
la source
Wow, je ne savais vraiment pas à ce sujet, mais ce n'est pas un gros code, vous pouvez essayer l'écho "z" après la boucle Mark est tout à fait raison J'utilise sa méthode mais si vous voulez une alternative, cela peut aussi vous pouvez essayer
la source