<?php
for ($i = 'a'; $i <= 'z'; $i++)
echo "$i\n";
Este fragmento proporciona el siguiente resultado (las nuevas líneas se reemplazan por espacios):
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 por 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';
el punto es que en C hay un tipo de char (símbolo de carácter 1), pero no en PHP, si U le dice a PHP$c = 'a';
, significa que es una cadena con solo 1 carácter. Es por eso que U no puede recorrer 28 caracteres adecuadamente en PHP. Espero que todos los programadores aprendan idiomas de bajo nivel y tipeo fuerte junto con ellos, sin olvidar las prácticas matemáticas, que los ayudarán a ser más fuertes.==
o!=
), consulte esta respuesta a una pregunta relacionada .Respuestas:
De los documentos :
De los comentarios: -
También debe notarse que
<=
es una comparación lexicográfica, entonces'z'+1 ≤ 'z'
. (Desde entonces'z'+1 = 'aa' ≤ 'z'
. Pero'za' ≤ 'z'
es la primera vez que la comparación es falsa). Romper cuándo$i == 'z'
funcionaría, por ejemplo.Ejemplo aquí .
fuente
ord()
así que nunca me di cuenta de esto.'aa'
es lexicográficamente más pequeño que'z'
, por eso el ciclo continúa. Y se detiene'yz'
porque'za'
es mayor quez
. Mira este ejemplo .Como una vez que se alcanza 'z' (y este es un resultado válido dentro de su rango, $ i ++ lo incrementa al siguiente valor en secuencia), el siguiente valor será 'aa'; y alfabéticamente, 'aa' es <'z', por lo que la comparación nunca se cumple
fuente
Otras respuestas explican el comportamiento observado del código publicado. Aquí hay una forma de hacer lo que quiere (y es un código más limpio, IMO):
En respuesta al comentario / pregunta de ShreevatsaR sobre la función de rango : Sí, produce el "punto final correcto", es decir, los valores pasados a la función están en el rango. Para ilustrar, el resultado del código anterior fue:
fuente
Otros ya dijeron por qué PHP no muestra lo que esperas. Así es como obtienes el resultado que deseas:
fuente
¿Por qué no solo usar
range('a','z')
?fuente
Prueba este código. Creo que este código te será útil.
Muestra 26 letras en secuencia.
fuente
fuente
También esto se puede usar:
fuente
PHP tiene la función de bucle de letras y puede exceder más allá de los caracteres individuales; el resto se hará de esta manera: aa ab ac ... zz, y así sucesivamente.
Prueba esto:
fuente
Si bien las respuestas anteriores son reveladoras de lo que está sucediendo y son bastante interesantes (no sabía que se comportaría así, y es bueno ver por qué).
La solución más fácil (aunque quizás no sea la más significativa) sería simplemente cambiar la condición a $ i! = 'Z'
fuente
El PHP no considera 'AA' menos que 'Z'. La mejor manera de hacer esto es:
ABCDEFGHIJKLMNOPQRSTU VWXYZ
fuente
Quizás este código funcione. Es fácil y se puede entender:
donde 26 es el número total de letras en el alfabeto.
fuente
Wow, realmente no sabía sobre esto, pero no es un código grande, puedes probar echo "z" después del bucle Mark es absolutamente correcto. Uso su método, pero si quieres una alternativa, entonces también puedes probar
fuente