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

php
2022-08-30 05:54:20
<?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 bwbx 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 eteu ev ew ex...on to yz


答案 1

文档中

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

例如,在 Perl 中变为 ,而在 C 中变为 ( , )。'Z'+1'AA''Z'+1'['ord('Z') == 90ord('[') == 91

请注意,字符变量可以递增,但不能递减,即使如此,也仅支持普通 ASCII 字符(a-z 和 A-Z)。

来自评论:-
还应该注意的是,这是一个词典比较,所以.(因为 .但这是第一次比较是错误的。例如,打破时间会起作用。<='z'+1 ≤ 'z''z'+1 = 'aa' ≤ 'z''za' ≤ 'z'$i == 'z'

示例如下


答案 2

因为一旦达到“z”(这是您的范围内的有效结果,$i++将其递增为序列中的下一个值),下一个值将是“aa”;按字母顺序,“aa”<“z”,因此永远不会满足比较

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

推荐