- 本文地址: https://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
受教了
运行了一下 电脑卡了 cry
[…] 注意PHP對字符串的遞增運算 […]
[…] Jul 10 PHP运算符优先级的一个例外 30 Jul 10 注意PHP对字符串的递增运算 18 Aug 10 将PHP […]
其实这是很有用的,我在用phpexcel导出报表的时候,使用的就是这个
在for循环中使用1个数字变量来控制字符变量的循环次数,就可以很轻松的控制好excel表格列
:
$array为数据库查询出来的数据
for($i=’A’,$j=’0′;$j<count($array);$j++,$i++){
echo $i;
}
[…] 本文地址: http://www.laruence.com/2010/07/30/1682.html […]
额~~从来没有考虑过这个问题~~
mark,以作警示
[…] = 'A'; $i 输出竟然是'AA'。。。这确实让人意外,最后在laruence的博客中找到了解释,原来当$i = […]
@luk4u 你好, 指点不敢, 有问题可以互相交流, 🙂
博主,您好,关注你的博客有一段时间了,感觉非常会钻研。我也有看php的c代码,memcached,nginx代码都有看过。我的博客http://hi.baidu.com/luk4u,希望多多指点我 ^^
大师就是大师啊.
看来很平常的问题,经过一分析原来其中还有大道理..
[…] 本文地址: http://www.laruence.com/2010/07/30/1682.html […]
[…] 风雪之隅 注意PHP对字符串的递增运算 http://www.laruence.com/2010/07/30/1682.html […]
[…] This post was mentioned on Twitter by Angus Li, 小夜. 小夜 said: 注意PHP对字符串的递增运算 : http://goo.gl/0Koy […]
[…] 注意PHP对字符串的递增运算 […]
@胖子 这个总结挺Cool:”PHP中没有字符”
其实说明了另一个问题:PHP中没有字符,即使用chr,返回的也是一个长度为1的字符串
如:
var_dump(chr(90));
得到:
string ‘Z’ (length=1)
学习了,感谢鸟哥