为什么这个代码不能简单地打印字母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') == 90
, ord('[') == 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