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

<\?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 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

30922 次浏览

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

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

PHP 官方文档:

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

例如,在Perl中'Z'+1转换为'AA',而在C中'Z'+1转换为'[' (ord('Z') == 90ord('[') == 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关于范围函数的评论/问题的回应:是的,它产生了“正确的端点”,即传递给函数的值在范围内。为了说明,上面代码的输出是:

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

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

首先你可以取范围从'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";
}

要打印html中的新行,可以将
附加到每个字符的末尾。

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'的字符串值