<?php
$string = '';
$j = 'Z';
for ($i = 'A'; $i <= $j; $i++) {
$string .= $i;
}
echo strlen($string);
上面代码, $j='Y' 时输出 25; $j='Z' 时输出 1326
我有2个疑问:
- 为什么 Y++ 之后是 AA,这是依据的什么规则?
- 如果 $i 和 $j 是按 ASCII 码进行对比,为什么 $i=YZ 时就跳出循环了,而 Z 和 ZA 的 ord() 值都是 90 呢 ?
请大神帮忙解惑,谢谢 ~
1. 'Z'+1 后为什么是 'AA'?
这个在PHP手册中有一段话说明
简单的说,就是PHP里面的字符串加法模仿了Perl 里面的处理方式,'Z'+1就是'AA'
2. PHP的字符串比较不是纯粹的ASCII比较
对应PHP源码,会比较好理解一些
拿 'ZZ' > 'Z' 来说, 取出两个字符串的头一个字符进行比较,发现是相等的,然后对比字符串长度,发现 'ZZ' 更长,所以 'ZZ' 大
参考:
注意PHP对字符串的递增运算
PHP字符串比较
PHP源码位置
memcmp reference