<?php
for ($i = 'a'; $i <= 'z'; $i++)
echo "$i\n";
Этот фрагмент дает следующий вывод (новые строки заменяются пробелами):
abcdefghijklmnopqrstu vwxyz аааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааенностьенность в представлении BF BG BH BH B B B B B B B B B B B B B B B B B B B B B B B B B B B B В БВ. 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 да db dc dd de df dg dh di dj dk dl dm dn do dp dq dr ds dt du dv dx dy dz ea eb ee ef, например, ej ej ek eme en epo eq es es eu evw eew ew ej
$c = 'a';
дело в том, что в C есть тип char (символ символа 1), но не в PHP, если U говорит PHP$c = 'a';
- означает, что это строка с одним символом. Вот почему вы не можете перебрать 28 символов в PHP. Я надеюсь, что каждый программист будет изучать языки низкого уровня и строгую типизацию вместе с ним, не забывая о математических практиках, которые помогут им стать сильнее.==
или!=
), проверьте этот ответ на связанный вопрос .Ответы:
Из документов :
Из комментариев: -
Следует также отметить, что
<=
это лексикографическое сравнение, поэтому'z'+1 ≤ 'z'
. (С тех пор'z'+1 = 'aa' ≤ 'z'
. Но'za' ≤ 'z'
это первый раз, когда сравнение ложно.)$i == 'z'
Например, когда будет работать.Пример тут .
источник
ord()
поэтому я никогда не замечал этого.'aa'
он лексикографически меньше'z'
, поэтому цикл продолжается. И это останавливается,'yz'
потому что'za'
больше, чемz
. Проверьте этот пример .Поскольку после достижения значения «z» (и это допустимый результат в вашем диапазоне, $ i ++ увеличивает его до следующего значения в последовательности), следующее значение будет «aa»; и в алфавитном порядке «aa» означает <«z», поэтому сравнение никогда не встречалось
источник
Другие ответы объясняют наблюдаемое поведение размещенного кода. Вот один из способов сделать то, что вы хотите (и это более чистый код, IMO):
В ответ на комментарий / вопрос ShreevatsaR о функции диапазона : Да, он создает «правильную конечную точку», то есть значения, переданные функции, находятся в диапазоне. Чтобы проиллюстрировать, выход из вышеприведенного кода был:
источник
Другие уже говорили, почему PHP не показывает то, что вы ожидаете. Вот как вы можете получить желаемый результат:
источник
Почему бы просто не использовать
range('a','z')
?источник
Попробуйте этот код. Я думаю, что этот код будет полезен для вас.
Покажите 26 букв в последовательности.
источник
источник
Также это может быть использовано:
источник
PHP имеет функцию зацикливания букв и может превышать отдельные символы; остальное будет сделано так: аааааааааа ... и т. д.
Попробуй это:
источник
Хотя приведенные выше ответы являются проницательными в отношении того, что происходит, и довольно интересны (я не знал, что это будет вести себя так, и приятно знать, почему.
Самым простым решением (хотя, возможно, и не самым значимым) было бы просто изменить условие на $ i! = 'Z'
источник
PHP не считает «AA» меньше, чем «Z». Лучший способ сделать это:
АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЭЮЯ
источник
Возможно, этот код будет работать. Это легко и можно понять:
где 26 - общее количество букв в алфавите.
источник
Ничего себе, я действительно не знал об этом, но это не большой код, вы можете попробовать echo "z" после цикла. Марк абсолютно прав. Я использую его метод, но если вам нужна альтернатива, то вы можете попробовать
источник