php - 为何这里代码仅打印字母A 到Z?

  显示原文与译文双语对照的内容

<?php
for ($i = 'a'; $i <= 'z'; $i++)
 echo"$in";

这里代码段给出以下输出( 换行符被空格替换):

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

时间:

文档列表中:

在处理字符变量的算术运算时,PHP遵循perl惯例而不是

例如在 Perl'z'+1中转换为'aa',而在C'z'+1中转换为'['( ord('Z') == 90,ord('[') == 91 ) 。

注意,字符变量可以增加,但不能减少,甚至只支持普通ASCII字符( A-Z和 A-Z ) 。

从 Comments:-
还应该注意," <="是一个字典比较,所以 'z'+1 ≤'z' 。 ( 自 'z'+1='aa'≤'z' 。但 'za'≤'z' 是第一次比较。) 在 $i=='z' 工作时中断,例如。

示例这里是

因为一旦'z'达到( 在你的范围内这是一个有效的结果,$i++ 将它按顺序递增到下一个值),下一个值将是'aa';按字母顺序排列,'aa'是 <'z',所以比较永远不会满足


for ($i = 'a'; $i!= 'aa'; $i++) 
 echo"$in"; 

其他的回答解释了已经发布代码的观察行为。 下面是执行( 更干净的代码,IMO )的一种方法:


foreach (range('a', 'z') as $i)
 echo"$in";

响应shreevatsar关于范围函数的注释/问题: 是,它生成"右端点",换句话说,传递给函数的值在范围内。 为了说明,我得到的输出是:


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

已经有其他人说PHP不显示你所期望的,这里是如何得到你想要的结果


<?php
for ($i = ord('a'); $i <= ord('z'); $i++)
 echo chr($i);
?>

php循环信件的功能,可以超过单个字符以外,其余将这样做: aa ab 。。zz,等等。

尝试使用


<?php
for ($i = 'a'; $i!== 'aa'; $i++)
 echo"$in";
?>

试试这个代码我认为这个代码对你有帮助。


$alphas = range('A', 'Z');
foreach($alphas as $value){
 echo $value."<br>";
}

按顺序显示 26字母

虽然上面的答案对正在进行的事情是有洞察力的,但有趣的是( 我不知道它会这样做,并且它很好地了解为什么。

最简单的修复( 虽然也许不是最有意义的) 就是将条件更改为 $i!='z''


<?php
for ($i = 'a'; $i!= 'z'; $i++) 
 echo"$in";
?>

...