注意PHP对字符串的递增运算

  • 作者: laruence(http://www.laruence.com)
  • 本文地址: http://www.laruence.com/2010/07/30/1682.html
  • 转载请注明出处

有同学问了一个问题:

<?php
for($i = 'A'; $i <= 'Z'; $i++) {
    echo $i;
}

输出是啥?

输出是:

ABCDEFGHIJKLMNOPQRSTUVWXYZAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARAS…….

为啥?

其实很简单, PHP的手册中也有说明, 只不过恐怕很多人不会一章一节的把手册仔细阅读一遍:

PHP follows Perl’s convention when dealing with arithmetic operations on character variables and not C’s. For example, in Perl ‘Z’+1 turns into ‘AA’, while in C ‘Z’+1 turns into ‘[‘ ( ord(‘Z’) == 90, ord(‘[‘) == 91 ). Note that character variables can be incremented but not decremented and even so only plain ASCII characters (a-z and A-Z) are supported.

在处理字符变量的算数运算时,PHP 沿袭了 Perl 的习惯,而非 C 的。例如,在 Perl 中 ‘Z’+1 将得到 ‘AA’,而在 C 中,’Z'+1 将得到 ‘[‘(ord(‘Z’) == 90,ord(‘[‘) == 91)。注意字符变量只能递增,不能递减,并且只支持纯字母(a-z 和 A-Z)。

也就是说, 如果:

$name = "laruence";
++$name; //将会是"laruencf"

而:

$name = "laruence";
--$name; //没有影响, 还是"laruence"

所以, 这个问题的原因就是当$i = Z的时候, ++$i成了AA, 而字符串比较的话,
AA,BB,XX一直到YZ都是小于等于Z的… so..

最后, 说个题外话: Blog现在支持订阅评论了, 同学们有提问以后等我回答的, 可以在留言提问的时候, 选择:Notify me of followup comments via e-mail

Comments

  • 2010/07/31, 胖子 writes: 学习了,感谢鸟哥
  • 2010/07/31, 胖子 writes: 其实说明了另一个问题:PHP中没有字符,即使用chr,返回的也是一个长度为1的字符串 如: var_dump(chr(90)); 得到: string 'Z' (length=1)
  • 2010/07/31, 雪候鸟 writes: @胖子 这个总结挺Cool:"PHP中没有字符"
  • 2010/07/31, 網站製作學習誌 » [Web] 連結分享 writes: [...] 注意PHP对字符串的递增运算 [...]
  • 2010/08/01, Tweets that mention 注意PHP对字符串的递增运算 | 风雪之隅 -- Topsy.com writes: [...] This post was mentioned on Twitter by Angus Li, 小夜. 小夜 said: 注意PHP对字符串的递增运算 : http://goo.gl/0Koy [...]
  • 2010/08/02, Think In LAMP Blog » Blog Archive » PHP每周通讯(20100802) writes: [...] 风雪之隅       注意PHP对字符串的递增运算             http://www.laruence.com/2010/07/30/1682.html  [...]
  • 2010/08/03, [转]注意PHP对字符串的递增运算 | { yeah : 必须哒 } writes: [...] 本文地址: http://www.laruence.com/2010/07/30/1682.html [...]
  • 2010/08/03, 江湖游医 writes: 大师就是大师啊. 看来很平常的问题,经过一分析原来其中还有大道理..
  • 2010/08/03, luk4u writes: 博主,您好,关注你的博客有一段时间了,感觉非常会钻研。我也有看php的c代码,memcached,nginx代码都有看过。我的博客http://hi.baidu.com/luk4u,希望多多指点我 ^^
  • 2010/08/04, 雪候鸟 writes: @luk4u 你好, 指点不敢, 有问题可以互相交流, :)
  • 2010/08/14, php字符递增问题 | Roy Gu writes: [...] = 'A'; $i 输出竟然是'AA'。。。这确实让人意外,最后在laruence的博客中找到了解释,原来当$i = [...]
  • 2010/12/30, pangyongtao writes: mark,以作警示
  • 2011/01/06, Jquery学习 writes: 额~~从来没有考虑过这个问题~~
  • 2011/03/20, 注意PHP对字符串的递增运算 | 万维网黑客联盟 writes: [...] 本文地址: http://www.laruence.com/2010/07/30/1682.html [...]
Copyright © 2010 风雪之隅 版权所有, 转载务必注明. 该Feed只供个人使用, 禁止未注明的转载或商业应用. 非法应用的, 一切法律后果自负. 如有问题, 可发E-mail至my at laruence.com.(Digital Fingerprint: 73540ba0a1738d7d07d4b6038d5615e2)

你可能感兴趣的:(PHP,String,随笔,increment,PHP应用)