#php字符递增问题
PHP代码
- <?php
- for ($i = 'a'; $i <= 'z'; $i++)
- echo "$i ";
- ?>
猜猜这段代码的输出结果是什么?我想大部分人和我一样,会说是a到z依次输出。但结果确出乎我的预料,我想也应该出乎大部分人的预料。
这是为什么呢?查了一下手册,有这么一段话。
PHP follows Perl's convention when dealing with arithmetic operations on character variables and not C's. For example, in PHP and Perl $a = 'Z'; $a++; turns $a into 'AA', while in C a = 'Z'; a++; turns a into '[' (ASCII value of 'Z' is 90, ASCII value of '[' is 91)
PHP在字符递增问题上沿用Perl而不是C的语法,在PHP和Perl中$a='z';$a++的值就变成“aa”。
然后php字符串的比较是逐位比较,如果相等,而继续往下比,如果不相等,直接返回比较结果,位数不够时,用“\0”补充。
比如这个例子,
PHP代码
- "z"<="z"; //true
- 那么"z"++="aa";
- "aa"<="z" //true
- 一直循环,直到
- "za"时,逐位比较
- "z"<="z" //true,相等,往下一位比
- "a"与"\0"进行比较,毫无疑问
- "a"<="\0"为false,循环中止,
于是乎,就得了到文章开头那个灰常出乎预料又在情理之中的结果了。