PHP – Ошибочная петля алфавита

Может ли кто-нибудь объяснить мне, почему:

<?php for ($i = 'a'; $i <= 'z'; $i++){ echo "$i "; } ?> 

Почему его выход:

abcdefghijklmnopqrstu vwxyz aa ab ac ad ae af ag ah ai aj ak al am a 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 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 da db dc dd df dg dh di dj dk dl dm dn do dp dq dr ds dt du dv dw dx dy dz e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e ex ex … on to yz

Но его работая отлично с

  <?php for ($i = 'a'; $i != 'aa'; $i++){ echo "$i "; } ?> 

Кажется, что цикл работает снова и снова, пока не достигнет «zz».

Если я дам $i<"aa" он должен работать нормально, но вместо этого он выводит только «a».

Solutions Collecting From Web of "PHP – Ошибочная петля алфавита"

См. Руководство для оператора инкремента :

PHP следует за соглашением Perl при работе с арифметическими операциями над символьными переменными, а не с C. Например, в PHP и Perl $ a = 'Z'; $ А ++; превращает $ a в 'AA', а в C a = 'Z'; A ++; превращает a в '[' (значение ASCII 'Z' равно 90, значение ASCII '[' равно 91). Обратите внимание, что символьные переменные могут увеличиваться, но не уменьшаться, и поэтому поддерживаются только простые символы ASCII (az и AZ). Приращение / уменьшение других символьных переменных не влияет, исходная строка не изменяется.

Вы не можете сделать меньше, чем ( $i < "aa" ) оператора в строке.

Он преобразуется в числовой тип, и результаты обычно непредсказуемы.