04
2013
06

#学习笔记#php字符递增问题

 PHP代码

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

猜猜这段代码的输出结果是什么?我想大部分人和我一样,会说是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多线程  (2014-8-31 18:22:59)

CodeIgniter中get_post 方法需要注意的地方  (2014-2-2 22:55:3)

PHP中判断变量为空的几种方法  (2014-1-24 9:40:14)

随便弄了个天气预报  (2013-3-24 2:23:12)

一个简单的MySql连接操作类  (2013-1-7 13:33:30)

#学习笔记#php实现计划任务  (2012-11-23 21:2:27)

#学习笔记#php时间格式参数  (2012-11-20 9:24:22)

一个实现无刷新文件上传的思路  (2012-11-11 21:37:19)

php+ajax+json实现分页  (2012-10-5 21:59:44)

php实现手机号码归属地查询  (2012-10-2 22:58:14)