<?php
for ($i = 'a'; $i <= 'z'; $i++)
echo "$i\n";
此代码段提供以下输出(换行符替换为空格):
abcdefghijklmnopqrstu vwxyz aa ab ac ad ae ag ag a a a a a a a a a a a a ap a a a a a ap ap a a a a a a a a a a a a a a a a a a a a b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b 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 dd d d d d d d d d d d d d d dq dr d d d d d d d d d d d 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 ex ex ... on yz
答案 0 :(得分:341)
来自docs:
PHP在处理字符变量而不是C的算术运算时遵循Perl的约定。
例如,在Perl中
'Z'+1
变为'AA'
,而在C'Z'+1
中变为'['
(ord('Z') == 90
,ord('[') == 91
)。请注意,字符变量可以递增但不会递减,即使只支持纯ASCII字符(a-z和A-Z)。
<强> From Comments:- 强>
还应该注意<=
是词典比较,所以'z'+1 ≤ 'z'
。 (自'z'+1 = 'aa' ≤ 'z'
起。但'za' ≤ 'z'
是第一次比较为假。)例如,$i == 'z'
可以解决。
答案 1 :(得分:122)
因为一旦达到'z'(并且这是你的范围内的有效结果,$ i ++将它按顺序递增到下一个值),下一个值将是'aa';按字母顺序排列,'aa'是&lt; 'z',所以比较从未得到满足
for ($i = 'a'; $i != 'aa'; $i++)
echo "$i\n";
答案 2 :(得分:98)
其他答案解释了所发布代码的观察行为。这是一种做你想做的事情(而且代码更清晰,IMO):
foreach (range('a', 'z') as $i)
echo "$i\n";
回应ShreevatsaR关于range函数的评论/问题:是的,它产生“正确的终点”,即传递给函数的值在范围内。为了说明,上面代码的输出是:
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
答案 3 :(得分:35)
其他人已经说过为什么PHP没有显示你的期望。以下是您获得所需结果的方法:
<?php
for ($i = ord('a'); $i <= ord('z'); $i++)
echo chr($i);
?>
答案 4 :(得分:22)
为什么不使用range('a','z')
?
答案 5 :(得分:4)
试试这段代码。我认为这段代码对您有所帮助。
$alphas = range('A', 'Z');
foreach($alphas as $value){
echo $value."<br>";
}
依次显示26个字母。
答案 6 :(得分:2)
<?php
$i = 'a';
do {
echo ($j=$i++),"\r\n";
} while (ord($j) < ord($i));
?>
答案 7 :(得分:2)
PHP具有循环字母的功能,可以超出单个字符;其余的将以这种方式完成:aa ac ... zz,依此类推。
<?php
for ($i = 'a'; $i !== 'aa'; $i++)
echo "$i\n";
?>
答案 8 :(得分:2)
这也可以使用:
for ($i = 'a'; $i <= 'z'; $i=chr(ord($i)+1))
echo "$i\n";
答案 9 :(得分:0)
虽然上面的答案对正在发生的事情有深刻的了解,而且非常有趣(我不知道它会表现得像这样,很高兴看到原因。
最简单的修复(尽管可能不是最有意义的)只是将条件更改为$ i!='z'
<?php
for ($i = 'a'; $i != 'z'; $i++)
echo "$i\n";
?>
答案 10 :(得分:0)
也许这段代码可行。它简单易行可以理解:
<?php
$ascii_val = ord("a");
for($i=$ascii_val;$i<$ascii_val+26;$i++){
echo chr($i)."\n";
}
?>
其中26是字母表中的字母总数。
答案 11 :(得分:0)
PHP不考虑&#39; AA&#39;小于&#39; Z&#39;。 最好的方法是:
for($i = 'a'; $i != 'aa'; $i++) {
echo $i;
}
ABCDEFGHIJKLMNOPQRSTUVWXYZ
答案 12 :(得分:0)
有几种方法可以做到这一点。
1. 首先,您可以取从“a”到“z”的范围。然后对其进行循环。
foreach(range('a', 'z') as $i)
{
echo $i . "\n";
}
2. 您可以使用字符的 asci 值打印字母。
for($i = 97 ; $i<=122; $i++)
{
echo chr($i) . "\n";
}
3.你可以取'a'的asci值并运行一个循环直到'z'的asci值:
for ($x = ord('a'); $x <= ord('z'); $x++)
{
echo chr($x) . "\n";
}
4. 要在 html 中打印新行,您可以将
附加到每个字符的末尾。
for($i='a';$i<='z';$i++)
{
echo $i. "<br />";
}
答案 13 :(得分:-3)
<?php
for ($i = "a"; $i = "y"; $i++) {
echo "$i\n";
if ($i == "z") {}
}
echo "z";
?>