<?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广告ae af ag啊ai aj ak半岛是一个ao美联社aq ar在非盟av aw ax ay az英航bb bc bd是男朋友bg bh bi bj bk提单bm bn bo bp bq br bs bt bu bv bw bx bz ca cb cc cd ce cf cg ch ci cj ck cl厘米cn公司cp cq cr cs ct铜连续波残雪cy cz da db直流dd de df dg dh di dj dk dl dm dn做dp dq博士ds dt dudv dw dxdy dz ea eb ec ed ee ef如呃ei ej ek el em en eo ep eq er es等欧盟ev电子战的前女友……到yz


其他人已经说过为什么PHP不能显示您所期望的东西。下面是得到你想要的结果的方法:

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

从文档中可以看出:

PHP在处理字符变量的算术运算时遵循Perl的惯例,而不是C的。 例如,在Perl中'Z'+1变成'AA',而在C中'Z'+1变成'[' (ord('Z') == 90, ord('[') == 91)。 请注意,字符变量可以递增,但不能递减,即使这样也只支持纯ASCII字符(a-z和a-z)。

从评论: 还应该注意,<=是一个字典比较,所以'z'+1≤'z'。(因为'z'+1 = 'aa'≤'z'。但“za”≤“z”是第一次比较为假。)例如,当$i == 'z'可以工作时中断。

例子。


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

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

其他答案解释了所发布代码的观察行为。这里有一种方法来做你想要的(而且它是更干净的代码,我觉得):

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

对于ShreevatsaR关于range函数的评论/问题:是的,它产生了“右端点”,即传递给函数的值都在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

为什么不直接使用range('a','z')?


虽然上面的答案对正在发生的事情有深刻的见解,而且非常有趣(我不知道它会这样表现,很高兴看到为什么。

最简单的解决方法(尽管可能不是最有意义的)是将条件更改为$i != 'z'

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

<?php

$i = 'a';
do {
echo ($j=$i++),"\r\n";
} while (ord($j) < ord($i));

?>

哇,我真的不知道这个,但它不是一个大代码,你可以试着在循环后回“z”马克是绝对正确的,我使用他的方法,但如果你想要其他的方法,那么你也可以试试

<?php
for ($i = "a"; $i = "y"; $i++) {
    echo "$i\n";
    if ($i == "z") {}
}
echo "z";
?>

PHP具有循环字母的功能,可以超过单个字符;剩下的就这样做:aa ab ac…Zz,等等。

试试这个:

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

this也可以用:

for ($i = 'a'; $i <= 'z'; $i=chr(ord($i)+1))
    echo "$i\n";

试试这段代码。我想这段代码会对你有帮助。

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

按顺序显示26个字母。


也许这个代码可以工作。这很容易理解:

<?php
$ascii_val = ord("a");
for($i=$ascii_val;$i<$ascii_val+26;$i++){
echo chr($i)."\n";
}
?>

26是字母表中字母的总数。


PHP不认为'AA'小于'Z'。 最好的方法是:

for($i = 'a'; $i != 'aa'; $i++) {
  echo $i;
}

abcdefghijklmnopqrstuvwxyz


有几种方法可以做到这一点。

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中的新行,可以将the附加到每个字符的末尾。

for($i='a';$i<='z';$i++)
{
    echo $i. "<br />"; 
}

这段代码可以工作。这很容易理解:

<?php


// print form A to ZZ  like this
// A B C ... AA AB AC ... ZA .. ZZ
$pre = "";
$i = ord('a');
for ($x = ord('a'); $pre . strtoupper(chr($x-1)) != 'AH'; $x++)
{
    echo "". $pre . strtoupper(chr($x)) . "\n";

    if(chr($x) === "z"){
        $pre = strtoupper(chr($i++));
        $x = ord('a');
        $x--;
    }
}

还有一种显示字符a-z的方法:

<?php
 for ($i = 'a'; $i < 'z'; $i++){
     echo "$i\n";
 }
 echo $i;  // 'z'

查看实时代码 一旦条件循环变为false, $i将已经被加了一,并且有了可以显示的对应于'z'的字符串值。