【问题标题】:PHP - Erroneous Alphabet LoopPHP - 错误的字母循环
【发布时间】:2012-01-11 17:49:21
【问题描述】:

谁能解释一下原因:

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

为什么它的输出是:

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... on to yz

但它的工作正常

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

循环似乎一遍又一遍地运行,直到到达“zz”。

如果我给$i&lt;"aa",它应该可以正常工作,但它只输出“a”。

【问题讨论】:

标签: php loops for-loop alphabetical


【解决方案1】:

查看increment operator的手册:

PHP 在处理算术运算时遵循 Perl 的约定 关于字符变量而不是 C 的。例如,在 PHP 和 Perl 中 $a = 'Z'; $a++;将 $a 变成 'AA',而在 C 中 a = 'Z';一个++;变成 '['('Z' 的 ASCII 值为 90,'[' 的 ASCII 值为 91)。注意 字符变量可以递增但不能递减,即使如此 仅支持纯 ASCII 字符(a-z 和 A-Z)。 增加/减少其他字符变量没有效果, 原字符串不变。

【讨论】:

  • 好的。我明白那个。但即便如此,循环在到达$i &lt; 'z' 时应该停止。它是如何进行的?
  • 我不明白你的意思 - It does stop
  • 哎呀!我的错!应该是$i &lt;= 'z' 为什么会继续“aa ab...”之类的?!循环应该停止,因为它已经到达“z”并回显它。不应该吗?
  • @maxxon15:因为这是一个词汇(即字母)比较。 aa 是“小于”z 因为当您按字母顺序排列它们时它会排在第一位。它停在yz 的原因是因为下一个字符串是za,它按字母顺序排在z 之后(“大于”)。
【解决方案2】:

您不能对字符串执行小于 ($i &lt; "aa") 运算符。

它将被转换为数字类型,结果通常是不可预测的。

【讨论】:

  • 取决于你想要做什么。
  • @maxxon15:因为aa 不是字母表中的一个字母...是z aa?如果你考虑你的顺序,是的,如果你考虑字母顺序,不,不是。所以这种比较并没有真正的意义。当然,使用==!= 是另一回事,因为您可以清楚地定义字符串的身份。
  • @nico 嗯...这清除了很多东西。这可能是为什么当我给出$i&lt;"aa" 时它只给出“a”并且甚至没有执行 a 到 z 的正常序列 O_o
  • 如果这就是你想要做的,你可以echo 'a b c d ...';echo implode(' ', range('a', 'z'));
  • @Benjam - 是的...从现在开始将使用range() 函数... :)
猜你喜欢
  • 2015-12-01
  • 2021-11-18
  • 1970-01-01
  • 1970-01-01
  • 2018-01-22
  • 1970-01-01
  • 1970-01-01
  • 2015-06-02
  • 2018-04-15
相关资源
最近更新 更多