2014-04-23 5 views
5

Ich habe versucht, a-z mit einer Do While-Schleife zu durchlaufen.
Ich weiß, dass ich das auch mit Foreach und Forloop machen kann.Looping obwohl A-Z mit Do While-Schleife in PHP

$char = 'a'; 
do { 
    echo $char; 
    $char++; 

} while ($char <= 'z'); 

Warum ist, dass die Ausgabe geben:

abcdefghijklmnopqrstuvwxyzaaabacadaeafagahaiajakalamanaoapaqarasatauavawaxayazbabbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzcacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczdadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzeaebecedeeefegeheiejekelemeneoepeqereseteuevewexeyezfafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzgagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzhahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhziaibicidieifigihiiijikiliminioipiqirisitiuiviwixiyizjajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzkakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktkukvkwkxkykzlalblcldlelflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzmambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymznanbncndnenfngnhninjnknlnmnnnonpnqnrnsntnunvnwnxnynzoaobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozpapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzqaqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzrarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzsasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsysztatbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytzuaubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzvavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzwawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzxaxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzyaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyz 

statt nur:

abcdefghijklmnopqrstuvwxyz 
+3

mein Verstand wurde geblasen – Pogrindis

Antwort

8

Vom documentation:

PHP Konvention Perl folgt, wenn sie mit arithmetischen Operationen auf Zeichenvariablen und nicht C zu tun hat. Zum Beispiel, in PHP und Perl $a = 'Z'; $a++; wird $a in 'AA', während in C a = 'Z'; a++; wird ein in '[' (ASCII-Wert von 'Z' ist 90, ASCII-Wert von '[' ist 91). Beachten Sie, dass Zeichenvariablen zwar inkrementiert, aber nicht dekrementiert werden können und sogar nur einfache ASCII-Alphabete und -Ziffern (a-z, A-Z und 0-9) unterstützt werden.

versuchen, etwas wie folgt aus:

for($i = 0, $char = 'a'; $i < 26; $i++, $char++) { 
    echo $char; 
} 
4

Sie nicht z mit 26 oder irgendeine Art von Zahl vergleichen. Du brauchst etwas, um es mit der Nummer zu vergleichen. Die Funktion ord() macht es. So können Sie so etwas wie:

$char = 'a'; 
do { 
    echo $char; 
    $char++; 

} while (ord($char) <= ord('z')); 
+0

Was ist mit ord ($ char) <= ord ('z')? – clami219

+0

Yeah ... :) Gute Idee. Danke @ Clami219. –

4

Da

<?php 

$char = 'z'; 

var_dump(++$char); //string(2) "aa" 

var_dump('aa' <= 'z'); //bool(true) 
var_dump('za' <= 'z'); //bool(false) 

DEMO

Persönlich würde ich nur eine Schleife von 97 (ASCII-Wert für a) verwenden, um 122 (Ascii-Wert für z):

for ($i = 97; $i <= 122; $i++) { 
    echo chr($i); 
} 
+0

Wow. Schöne Beobachtung! : D –