В PHP почему диапазон a-Z и цикл for, примененные к алфавиту, производят разные символы? - PullRequest
0 голосов
/ 30 апреля 2018

Я заметил, что в PHP есть два разных поведения, когда мы увеличиваем алфавит:

Диапазон:

range('a', 'Z');

выход:

["a","`", "_", "^", "]","\", "[","Z"]

Которые соответствуют таблице ASCII и имеют смысл для меня.

Но когда мы увеличиваем с для цикла:

$letters = [];
for($i = 'a'; $i !== 'Z'; $i++){
    $letters[] = $i;
}

выход:

[ "a", "b", "c", "d", ..., "x", "y", "z", "aa", "ab", "ac", "ad", "ae", "af", ...]

Почему php внезапно застрял с буквами 'a-z' вместо использования таблицы ASCII?

А как работает метод диапазона, чтобы не использовать это поведение?

1 Ответ

0 голосов
/ 30 апреля 2018

Просто прочитайте инструкцию: http://php.net/manual/en/language.operators.increment.php

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...