2013-03-04 2 views
2

У меня есть этот кодPHP Echo голец переменная ошибка

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

У меня есть вопрос, что если

$i <="y" 

это все-таки правильно, и эхо

a->y 

Но если $i<="z" как выше результатом будет:

abcdefghijklmnopqrstuvwxyzaaabacadaeafagahaiajakalamanaoapaqarasatauavawaxayazbabbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzcacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczdadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzeaebecedeeefegeheiejekelemeneoepeqereseteuevewexeyezfafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzgagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzhahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhziaibicidieifigihiiijikiliminioipiqirisitiuiviwixiyizjajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzkakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktkukvkwkxkykzlalblcldlelflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzmambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymznanbncndnenfngnhninjnknlnmnnnonpnqnrnsntnunvnwnxnynzoaobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozpapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzqaqbqcqdqeqfqgqhqiqjqkqlqmq nqoqpqqqrqsqtquqvqwqxqyqzrarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzsasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsysztatbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytzuaubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzvavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzwawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzxaxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzyaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyz

Я не знаю, почему кто-то может помочь мне?

+0

Ничего себе, это как excel a-z, а затем aa-az ... – Bakudan

+1

$ i - это строка, и i ++ может конкатенировать их. – acutesoftware

+0

Что вы на самом деле хотите распечатать? Алфавит? –

ответ

5

Взгляните на то, что PHP documentation говорит о Инкрементирование персонажей:

PHP следующим образом в Perl конвенция при работе с арифметическими операциями по символьным переменным, а не по C. Например, в PHP и Perl $ a = 'Z'; $ А ++; превращает $ a в 'AA', а в C a = 'Z'; A ++; превращает a в '[' (Значение ASCII 'Z' равно 90, значение ASCII '[' равно 91). Обратите внимание, что символьные переменные могут увеличиваться, но не уменьшаться, и даже поэтому поддерживаются только простые символы ASCII (a-z и A-Z). Приращение/уменьшение других символьных переменных не влияет, исходная строка не изменяется.

+0

Tks man! Итак, $ i = "z", то $ i ++ даст результат $ i = "aa" вправо? И «z» <"aa", что кажется странным, разве это не так? @@ –

+0

Да. Например, вы можете прервать цикл, когда $ i == 'z'. Использование 'break'. – Alvaro

+0

@ DucAnh сравнение, используемое для «z» <«aa», является лексическим, как в «bar» <"car" <"case". Это не странно, просто не тот, которого ты ожидаешь – tmuguet

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

В для петли с 2-го приращения времени работы первого и затем проверить состояние так вот на последней, когда $ я = «Z», ($ я < = "z") проверить после ($ i ++) в то время, когда он увеличит свое значение, $ i станет «z» до «aa», который снова меньше, чем «z», поэтому цикл продолжается до «yz».

Смежные вопросы