【问题标题】:PHP Echo char variable mistake [closed]PHP Echo char变量错误[关闭]
【发布时间】:2013-03-04 13:28:34
【问题描述】:

我有这个代码

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

我有一个问题,如果

$i <="y"

还是正确的,回显

a->y

但是如果 $i&lt;="z" 就像上面的结果将是:

abcdefghijklmnopqrstuvwxyzaaabacadaeafagahaiajakalamanaoapaqarasatauavawaxayazbabbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzcacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczdadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzeaebecedeeefegeheiejekelemeneoepeqereseteuevewexeyezfafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzgagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzhahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhziaibicidieifigihiiijikiliminioipiqirisitiuiviwixiyizjajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzkakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktkukvkwkxkykzlalblcldlelflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzmambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymznanbncndnenfngnhninjnknlnmnnnonpnqnrnsntnunvnwnxnynzoaobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozpapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzqaqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzrarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzsasbscsdsesfsgshsisjskslsmsnsospsqs rssstsusvswsxsysztatbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytzuaubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzvavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzwawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzxaxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzyaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyz P>

不知道为什么,谁能帮帮我?

【问题讨论】:

  • 哇,这就像 excel a-z,然后是 aa-az ...
  • $i 是一个字符串,而 i++ 可以将它们连接起来
  • 您真正希望它打印出的是什么?字母表?
  • @TillHelgeHelwig 你明白了,伙计:D

标签: php


【解决方案1】:

看看PHP documentation 对递增字符的说法:

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

【讨论】:

  • 谢谢哥们!所以 $i="z" 然后 $i++ 会给出结果 $i="aa" 对吗?而“z”
  • 是的。例如,您可以尝试在 $i == 'z' 时中止循环。使用break
  • @DucAnh 用于 "z"
  • 是的,这并不奇怪。逻辑上是正确的。
【解决方案2】:

如果您尝试打印 a-z,那么 PHP 的 range 函数会很有用

http://php.net/manual/en/function.range.php

foreach (range('a', 'z') as $letter) {
    echo $letter;
}

【讨论】:

    【解决方案3】:

    你也可以试试这个:

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

    【讨论】:

      【解决方案4】:

      我不知道为什么会发生这种情况,或者为什么你会这样做。但如果你只想要一个包含所有字符 a-z 的数组 (?),试试:

      $myArray = range('a', 'z');

      【讨论】:

        【解决方案5】:

        "aa" &lt;= "z" 返回 true 因为词法比较(这不是您所期望的比较),所以您的循环一直持续到 "za"

        如其他答案中所述,请使用range('a', 'z')for($i="a"; $i != "aa"; $i++)

        【讨论】:

          【解决方案6】:

          在for循环中,第二次增量首先工作,然后检查条件,所以在最后一次当 $i="Z",($i

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-06-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多