<?php
for ($i = 'a'; $i <= 'z'; $i++)
echo "$i\n";
Este trecho fornece a seguinte saída (novas linhas são substituídas por espaços):
abcdefghijklmnopqrstu vwxyz aa ab ac ad a ag ah ai aj ak al am an ao ap aq ar como em au av aw ax a az ba bb bc bd ser bf bg bh bi bj bk bl bm bn bb b b b b b b b b b b b b b 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 df dg dh di dj dk dl dm dn dp dq dr ds dt du dv dw dx dy dz e eb ec ed ee ef eg eh ei ej ek el em en e ep eq er es et eu ev ew ex ... on to yz
$c = 'a';
o ponto é que em C existe um tipo de caractere (símbolo do caractere 1), mas não no PHP, se você informar ao PHP$c = 'a';
- significa que esta é uma string com apenas 1 caractere. É por isso que U não pode executar um loop de 28 caracteres adequadamente no PHP. Espero que todos os programadores aprendam linguagens de baixo nível e digitação forte, sem esquecer as práticas de matemática, o que os ajudará a serem mais fortes.==
ou!=
), verifique esta resposta a uma pergunta relacionada .Respostas:
Dos documentos :
De Comentários: -
Deve-se notar também que
<=
é uma comparação lexicográfica'z'+1 ≤ 'z'
. (Desde então'z'+1 = 'aa' ≤ 'z'
. Mas'za' ≤ 'z'
é a primeira vez que a comparação é falsa.) Quebrar quando$i == 'z'
funcionaria, por exemplo.Exemplo aqui .
fonte
ord()
então nunca notei isso.'aa'
é lexicograficamente menor que'z'
, é por isso que o loop continua. E pára'yz'
porque'za'
é maior quez
. Veja este exemplo .Como uma vez que 'z' é atingido (e este é um resultado válido dentro do seu intervalo, o $ i ++ o incrementa para o próximo valor em sequência), o próximo valor será 'aa'; alfabeticamente, 'aa' é <'z'; portanto, a comparação nunca é atendida
fonte
Outras respostas explicam o comportamento observado do código publicado. Aqui está uma maneira de fazer o que você deseja (e é um código mais limpo, IMO):
Em resposta ao comentário / pergunta de ShreevatsaR sobre a função range : Sim, produz o "ponto final correto", isto é, os valores passados para a função estão no range. Para ilustrar, a saída do código acima foi:
fonte
Outros já disseram por que o PHP não mostra o que você espera. Veja como você obtém o resultado que deseja:
fonte
Por que não usar apenas
range('a','z')
?fonte
Experimente este código. Eu acho que esse código será útil para você.
Exiba 26 letras em sequência.
fonte
fonte
Também isso pode ser usado:
fonte
O PHP tem a função de repetir letras e pode exceder além de caracteres únicos; o resto será feito desta maneira: aa ab ac ... zz e assim por diante.
Tente o seguinte:
fonte
Embora as respostas acima sejam esclarecedoras sobre o que está acontecendo, e bastante interessantes (eu não sabia que se comportaria assim, é bom entender o porquê.
A correção mais fácil (embora talvez não seja a mais significativa) seria apenas alterar a condição para $ i! = 'Z'
fonte
O PHP não considera 'AA' menor que 'Z'. A melhor maneira de fazer isso é:
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
fonte
Talvez esse código funcione. É fácil e pode ser entendido:
onde 26 é o número total de letras no alfabeto.
fonte
Uau, eu realmente não sabia disso, mas não é um código grande, você pode tentar eco "z" após o loop Mark está absolutamente certo Eu uso o método dele, mas se você quiser alternativa, isso também pode ser possível
fonte