2013-03-04 235 views
2

我有這樣的代碼PHP回聲char變量錯誤

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

我有一個問題,如果

$i <="y" 

它仍然是正確的,回聲

a->y 

但如果 $i<="z"像上面結果將是:

abcdefghijklmnopqrstuvwxyzaaabacadaeafagahaiajakalamanaoapaqarasatauavawaxayazbabbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzcacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczdadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzeaebecedeeefegeheiejekelemeneoepeqereseteuevewexeyezfafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzgagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzhahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhziaibicidieifigihiiijikiliminioipiqirisitiuiviwixiyizjajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzkakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktkukvkwkxkykzlalblcldlelflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzmambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymznanbncndnenfngnhninjnknlnmnnnonpnqnrnsntnunvnwnxnynzoaobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozpapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzqaqbqcqdqeqfqgqhqiqjqkql qmqnqoqpqqqrqsqtquqvqwqxqyqzrarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzsasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsysztatbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytzuaubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzvavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzwawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzxaxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzyaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyz

我不知道爲什麼,有人可以幫我嗎?

+0

哇,它就像excel a-z,然後aa-az ... – Bakudan 2013-03-04 13:30:41

+1

$ i是一個字符串,i ++可以將它們連接起來 – acutesoftware 2013-03-04 13:30:59

+0

它是什麼,你真的希望它打印出來?字母表? – 2013-03-04 13:41:39

回答

5

看看什麼PHP documentation說,關於增加字符:

PHP如下Perl的約定在處理字符變量而不是C的算術運算 。例如,在PHP和Perl中$ a = 'Z'; $ A ++;將$ a變成'AA',而在C a ='Z'中;一個++;將a變成 '['('Z'的ASCII值是90,'['的ASCII值是91)。請注意, 字符變量可以遞增但不遞減,即使如此 也只支持純ASCII字符(a-z和A-Z)。 遞增/遞減其他字符變量不起作用, 原始字符串不變。

+0

Tks男子!所以$ i =「z」,那麼$ i ++會給出結果$ i =「aa」對不對? 而「z」<「aa」,這似乎有點奇怪不是嗎? @@ – 2013-03-04 13:44:43

+0

是的。例如,您可以嘗試在$ i =='z'時中止循環。使用「break」。 – Alvaro 2013-03-04 13:45:40

+0

@DucAnh用於「z」<「aa」的比較是一個詞法,如「bar」<「car」<「case」。這並不奇怪,只是不是你期望的那個 – tmuguet 2013-03-04 13:51:33

0

你也可以試試這個:

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

我不知道爲什麼會這樣,爲什麼你會做這樣的..但是如果你只是想一個數組(?)與所有字符a-z,請嘗試:

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

0

"aa" <= "z"返回true由於詞法比較(這不是你期望的比較),所以你的循環一直持續到"za"

正如在其他的答案中提到,使用range('a', 'z')for($i="a"; $i != "aa"; $i++)

0

在for循環中,從第2次增量工作第一,然後在最後一所以在這裏查詢條件時,$ I =「Z」,($ I < =「z」)檢查當時($ i ++)當它增加它的值時,$ i變成「z」到「aa」,再次小於「z」,因此循環保持繼續到「yz」。