3

我有这个代码

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

我有一个问题,如果

$i <="y"

它仍然是正确的并且回声

a->y

但如果 $i<="z"像上面那样,结果将是:

abcdefghijklmnopqrstuvwxyzaaabacadaeafagahaiajakalamanaoapaqarasatauavawaxayazbabbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzcacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczdadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzeaebecedeeefegeheiejekelemeneoepeqereseteuevewexeyezfafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzgagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzhahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhziaibicidieifigihiiijikiliminioipiqirisitiuiviwixiyizjajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzkakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktkukvkwkxkykzlalblcldlelflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzmambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymznanbncndnenfngnhninjnknlnmnnnonpnqnrnsntnunvnwnxnynzoaobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozpapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzqaqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzrarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzsasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsysztatbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytzuaubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzvavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzwawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzxaxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzyaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzxqxrxsxtxuxvxwxxxyxzyaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzxqxrxsxtxuxvxwxxxyxzyaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyz

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

4

6 回答 6

6

看看PHP 文档中关于递增字符的说明:

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

于 2013-03-04T13:32:16.903 回答
3

如果你想打印 az 那么 PHP 的range函数会很有用

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

foreach (range('a', 'z') as $letter) {
    echo $letter;
}
于 2013-03-04T13:31:40.203 回答
0

你也可以试试这个:

for($i="a"; $i != "aa"; $i++)
{
  echo $i;
}
于 2013-03-04T13:33:01.833 回答
0

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

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

于 2013-03-04T13:33:57.923 回答
0

"aa" <= "z"true由于词法比较(这不是您期望的比较)而返回,因此您的循环将继续直到"za".

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

于 2013-03-04T13:44:23.417 回答
0

在从第二次开始的for循环中,增量首先工作,然后检查条件,所以最后在 $i="Z", ($i<="z") 在 ($i++) 之后检查时,它增加了它值,$i 变成 "z" 到 "aa",它再次小于 "z",所以循环仍然继续到 "yz"。

于 2013-03-04T13:55:45.123 回答