2015-11-16 3 views
3

Так что я делаю некоторые упражнения и побежал через этот код (который производит «1. Пункт А», «2. Пункт Б», и т.д.):Увеличение количества символов в циклах работает, декрементируя, нет?

echo "\n<ol>"; 
for ($x='A'; $x<'G'; $x++){ 
    echo "<li>Item $x</li>\n"; 
} 
echo "\n</ol>"; 

Любопытный, я попытался сделать обратное (что создает бесконечный цикл Zs):

echo "\n<ol>"; 
for ($x = 'Z'; $x > 'M'; $x--){ 
    echo "<li>Item $x</li>\n"; 
} 
echo "\n</ol>"; 

Что я пропустил здесь?

+0

по какой-либо причине, '--' не работает символов строки. и приращение персонажа должно технически считаться ошибкой. что '$ x ++' совпадает с '$ x = $ x + 1;', поэтому вы делаете '$ x = 'A' + 1;' и '$ x = 'Z' - 1', оба из которых ДОЛЖНЫ оценивать значение '0', когда символы передаются целым числам. –

ответ

4

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

из PHP инструкции link