为什么这个代码不能简单地打印字母A到Z?
<?php for ($i = 'a'; $i <= 'z'; $i++) echo "$i\n";
这段代码给出了以下输出(换行符被空格replace):
abcdefghijklmnopqrstu vwxyz aa ab ac ad af af ah ah a a a al a a a ap ap a ar as as au av aw 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 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 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 ew ev ew ex …
从文档 :
在处理字符variables而不是C的算术运算时,PHP遵循Perl的惯例。
例如,在Perl中,
'Z'+1
变成'AA'
,而在'Z'+1
变成'['
(ord('Z') == 90
,ord('[') == 91
) 。请注意,字符variables可以递增但不递减,即使只有纯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 "$i\n";
其他答案解释了发布代码的观察行为。 这里有一种方法可以做你想做的事情(而且是更简洁的代码,IMO):
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
其他人已经说过为什么PHP不显示你的期望。 以下是你如何得到你可能想要的结果:
<?php for ($i = ord('a'); $i <= ord('z'); $i++) echo chr($i); ?>
为什么不使用range('a','z')
?
试试这个代码。 我认为这个代码会对你有所帮助。
$alphas = range('A', 'Z'); foreach($alphas as $value){ echo $value."<br>"; }
依次显示26个字母。
<?php $i = 'a'; do { echo ($j=$i++),"\r\n"; } while (ord($j) < ord($i)); ?>
这也可以使用:
for ($i = 'a'; $i <= 'z'; $i=chr(ord($i)+1)) echo "$i\n";
PHP具有循环字母的function,可以超越单个字符; 剩下的就是这样做的:a a ab ac … zz,等等。
尝试这个:
<?php for ($i = 'a'; $i !== 'aa'; $i++) echo "$i\n"; ?>
虽然上面的回答对于发生的事情是非常有洞见的,而且非常有趣(我不知道它会如此行事,而且很明白为什么。
最简单的修复(尽pipe可能不是最有意义的)只是将条件改为$ i!='z'
<?php for ($i = 'a'; $i != 'z'; $i++) echo "$i\n"; ?>
PHP不认为'AA'小于'Z'。 最好的方法是:
for($i = 'a'; $i != 'aa'; $i++) { echo $i; }
ABCDEFGHIJKLMNOPQRSTUVWXYZ
也许这个代码将起作用。 这很容易,可以理解:
<?php $ascii_val = ord("a"); for($i=$ascii_val;$i<$ascii_val+26;$i++){ echo chr($i)."\n"; } ?>
其中26是字母表中的字母总数。
哇,我真的不知道这个,但它不是一个大的代码,你可以尝试echo“z”后循环马克是绝对正确我用他的方法,但如果你想替代,那么也可以尝试
<?php for ($i = "a"; $i = "y"; $i++) { echo "$i\n"; if ($i == "z") {} } echo "z"; ?>