PHP - ошибочный алфавитный цикл - PullRequest
2 голосов
/ 02 декабря 2011

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

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

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

а б в г д е ф х и ч к л м н о п к р с т у ф х ц ч ш о р о с т ь ах ай ай ай ак аль я ао ап ак ар как в ав ав ав топор ау аз ба бб до н bd be bf bg bh bi bj bk bl bm bn bo bp bq br bs bt bu bv bw bx от 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 dv dw dx dy d e e e e e e e e e e e eq э-э-э-э-э, э, э, быв ... на yz

Но работает нормально с

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

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

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

Ответы [ 2 ]

5 голосов
/ 02 декабря 2011

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

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

1 голос
/ 02 декабря 2011

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

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

...