Может ли кто-нибудь объяснить мне, почему:
<?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».
См. Руководство для оператора инкремента :
PHP следует за соглашением Perl при работе с арифметическими операциями над символьными переменными, а не с C. Например, в PHP и Perl $ a = 'Z'; $ А ++; превращает $ a в 'AA', а в C a = 'Z'; A ++; превращает a в '[' (значение ASCII 'Z' равно 90, значение ASCII '[' равно 91). Обратите внимание, что символьные переменные могут увеличиваться, но не уменьшаться, и поэтому поддерживаются только простые символы ASCII (az и AZ). Приращение / уменьшение других символьных переменных не влияет, исходная строка не изменяется.
Вы не можете сделать меньше, чем ( $i < "aa"
) оператора в строке.
Он преобразуется в числовой тип, и результаты обычно непредсказуемы.