PHP Echo char变量错误

时间:2013-03-04 13:28:35

标签: php

我有这段代码

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

我有一个问题,如果

$i <="y"

它仍然是正确的并且回声

a->y

但是如果 $i<="z"如上所述,结果将是:

  

abcdefghijklmnopqrstuvwxyzaaabacadaeafagahaiajakalamanaoapaqarasatauavawaxayazbabbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzcacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczdadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzeaebecedeeefegeheiejekelemeneoepeqereseteuevewexeyezfafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzgagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzhahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhziaibicidieifigihiiijikiliminioipiqirisitiuiviwixiyizjajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzkakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktkukvkwkxkykzlalblcldlelflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzmambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymznanbncndnenfngnhninjnknlnmnnnonpnqnrnsntnunvnwnxnynzoaobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozpapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzqaqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzrarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzsasbscsdsesfsgshsisjskslsmsnsospsqs rssstsusvswsxsysztatbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytzuaubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzvavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzwawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzxaxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzyaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyz

我不知道为什么,有人可以帮助我吗?

6 个答案:

答案 0 :(得分:5)

看看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)。   递增/递减其他字符变量没有效果,   原始字符串不变。

答案 1 :(得分:3)

如果您尝试打印a-z,那么PHP的range功能可能很有用

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

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

答案 2 :(得分:0)

你也可以试试这个:

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

在第二次增量的for循环中首先工作,然后检查条件,所以在这里最后当$ i =“Z”时,($ i&lt; =“z”)检查当时($ i ++)当时它增加了它的值,$ i变为“z”到“aa”,它再次小于“z”,所以循环仍然继续到“yz”。