为什么这个代码不能简单地打印字母A到Z?

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

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

abcdefghijklmnopqrstu vwxyz aa ab ac ad ae af ag ah a a a a al a a a ap ap a ar as as 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 dd df dg dh di dj dk dl dm dn do dp dq dr ds dt du dv dw dx dy dz ea e ee e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e e ev ew ev ew ev exw ex ... on to yz


从文档:

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

例如,在Perl中, 'Z'+1变成'AA' ,而在'Z'+1变成'['ord('Z') == 90ord('[') == 91 ) 。

请注意,字符变量可以递增但不递减,即使只有纯ASCII字符(az和AZ)也受支持。

来自评论: -
还应该注意的是, <=是词典对比,所以'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
链接地址: http://www.djcxy.com/p/72265.html

上一篇: Why doesn't this code simply print letters A to Z?

下一篇: Strange behavior for Map, parseInt