我注意到当我们递增字母表时,PHP 中有两种不同的行为:
范围:
range('a', 'Z');
输出:
["a","`", "_", "^", "]","", "[","Z"]
它对应于 ASCII 表,对我来说很有意义。
但是当我们用for 循环递增时:
$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 表?
以及如何使用不使用此行为的范围方法?
只需阅读手册: http://php.net/manual/en/language.operators.increment.php
PHP 在处理算术运算时遵循 Perl 的约定 在字符变量而不是 C 上。例如,在 PHP 和 Perl 中 $a = "Z";$a++;将$a转换为"AA",而在 C 中 a = "Z";a++;变成 "["("Z"的 ASCII 值为 90,"["的 ASCII 值为 91(。请注意, 字符变量可以递增,但不能递减,即使如此 只有纯 ASCII 字母和数字(a-z、A-Z 和 0-9(是 支持。递增/递减其他字符变量没有 效果,原始字符串保持不变。