msgbartop
PHP语言, PHP扩展, Zend引擎相关的研究,技术,新闻分享 – 左手代码 右手诗
msgbarbottom

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

有同学问了一个问题:

<?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


分享到:



Related Posts:

Tags: ,

16 Responses to “注意PHP对字符串的递增运算”

  1. 风雪之隅-鸟哥文章汇总 | 互联网菜鸟 |

    [...] Jul 10 PHP运算符优先级的一个例外  30 Jul 10 注意PHP对字符串的递增运算 18 Aug 10 将PHP [...]

  2. neolkb |

    其实这是很有用的,我在用phpexcel导出报表的时候,使用的就是这个
    在for循环中使用1个数字变量来控制字符变量的循环次数,就可以很轻松的控制好excel表格列
    :
    $array为数据库查询出来的数据
    for($i=’A',$j=’0′;$j<count($array);$j++,$i++){
    echo $i;
    }

  3. 注意PHP对字符串的递增运算 | 万维网黑客联盟 |

    [...] 本文地址: http://www.laruence.com/2010/07/30/1682.html [...]

  4. Jquery学习 |

    额~~从来没有考虑过这个问题~~

  5. pangyongtao |

    mark,以作警示

  6. php字符递增问题 | Roy Gu |

    [...] = 'A'; $i 输出竟然是'AA'。。。这确实让人意外,最后在laruence的博客中找到了解释,原来当$i = [...]

  7. 雪候鸟 |

    @luk4u 你好, 指点不敢, 有问题可以互相交流, :)

  8. luk4u |

    博主,您好,关注你的博客有一段时间了,感觉非常会钻研。我也有看php的c代码,memcached,nginx代码都有看过。我的博客http://hi.baidu.com/luk4u,希望多多指点我 ^^

  9. 江湖游医 |

    大师就是大师啊.
    看来很平常的问题,经过一分析原来其中还有大道理..

  10. [转]注意PHP对字符串的递增运算 | { yeah : 必须哒 } |

    [...] 本文地址: http://www.laruence.com/2010/07/30/1682.html [...]

  11. Think In LAMP Blog » Blog Archive » PHP每周通讯(20100802) |

    [...] 风雪之隅       注意PHP对字符串的递增运算             http://www.laruence.com/2010/07/30/1682.html  [...]

  12. Tweets that mention 注意PHP对字符串的递增运算 | 风雪之隅 -- Topsy.com |

    [...] This post was mentioned on Twitter by Angus Li, 小夜. 小夜 said: 注意PHP对字符串的递增运算 : http://goo.gl/0Koy [...]

  13. 網站製作學習誌 » [Web] 連結分享 |

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

  14. 雪候鸟 |

    @胖子 这个总结挺Cool:”PHP中没有字符”

  15. 胖子 |

    其实说明了另一个问题:PHP中没有字符,即使用chr,返回的也是一个长度为1的字符串
    如:
    var_dump(chr(90));
    得到:
    string ‘Z’ (length=1)

  16. 胖子 |

    学习了,感谢鸟哥

Leave a Reply

*