在 PHP 中,为什么应用于字母表的范围 a-Z 和 for 循环会产生不同的字符?



我注意到当我们递增字母表时,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(是 支持。递增/递减其他字符变量没有 效果,原始字符串保持不变。

最新更新