我们在使用php语言时,经常会遇到循环输出,例如for、while等等,而这里一般是用做数字循环,例如1-10等。但有时我们也会用到字母的输出,例如从a-z的输出,用于行业站排序城市名字等。这个应该怎么做呢,下面听cms大学小编细细讲来。
一、错误的方法:
首先按照我们对php的理解,循环语句应该这样写。
- for ($i = 'a'; $i <= 'z'; $i++){
- echo "$i\n";
- }
输出的结果是这样的:
- a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf bg bh bi bj bk bl bm bn bo bp bq br bs bt bu bv bw bx by bz ca cb cc cd ce cf cg ch ci cj ck cl cm cn co cp cq cr cs ct cu cv cw cx cy cz da db dc dd de df dg dh di dj dk dl dm dn do dp dq dr ds dt du dv dw dx dy dz ea eb ec ed ee ef eg eh ei ej ek el em en eo ep eq er es et eu ev ew ex... yz
而我们想要的其实是这样的:
- a
- b
- c
- d
- e
- .
- .
- z
错误分析:
这有点无语了,其实解决起来也很简单,这里涉及到一个php的特性。
请看php官方链接:http://php.net/manual/en/language.operators.increment.php
其中注意一下这句:
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). Note that character variables can be incremented but not decremented and even so only plain ASCII alphabets and digits (a-z, A-Z and 0-9) are supported. Incrementing/decrementing other character variables has no effect, the original string is unchanged.
翻译过来是这个样子:
- 在处理字符变量的算数运算时,PHP 沿袭了 Perl 的习惯,而非 C 的。例如,在 Perl 中 ‘Z’+1 将得到 ‘AA’,而在 C 中,’Z'+1 将得到 ‘[‘(ord(‘Z’) == 90,ord(‘[‘) == 91)。注意字符变量只能递增,不能递减,并且只支持纯字母(a-z 和 A-Z)。
所以, 这个问题的原因在于,就是我们的循环停止条件当$i = Z的时候, ++$i成了AA, 而字符串比较时,AA,BB,XX一直到YZ都是小于等于Z的,所以我们的循环从头到尾一直运行到结束。
正确的写法:
第一种:
- for($i=97;$i<122;$i++){
- echo chr($i).”\n”;
- }
第二种:
- for($i=ord(‘a’);$i<ord(‘z’);$i++){
- echo chr($i).”\n”;
- }
第三种:
- foreach(range('a','z') as $word){
- echo $word."<br/>";
- }
第四种:
- for($i=0;$i<26;$i++)
- {
- echo $str=chr(65+$i).'<br />';
- }
通过以上的方法我们就可以开心的输出a-z的字母了,至于有何作用,大家自己开发咯!!!