#php字符递增问题

#php字符递增问题

 PHP代码

  1. for ($i = 'a'$i <= 'z'$i++)  
  2.     echo "$i ";  
  3. ?>  

猜猜这段代码的输出结果是什么?我想大部分人和我一样,会说是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代码
  1. "z"<="z"//true  
  2. 那么"z"++="aa";  
  3. "aa"<="z" //true  
  4.   
  5. 一直循环,直到  
  6. "za"时,逐位比较  
  7. "z"<="z" //true,相等,往下一位比  
  8. "a""\0"进行比较,毫无疑问  
  9. "a"<="\0"为false,循环中止,  

于是乎,就得了到文章开头那个灰常出乎预料又在情理之中的结果了。

你可能感兴趣的:(PHP)