2014-09-05 42 views
0

自動遞增我只是給了這樣的回答:https://stackoverflow.com/a/25688064/2627459爲了遍歷字母組合,用下面的代碼:爲什麼這個for循環比較失敗後的字母

for ($letter = 'a'; ; ++$letter) { 
    echo $letter . '<br>'; 
    if ($letter == 'zz') break; 
} 

這僅僅是工作的罰款。

然後我試圖將break移動到for循環比較,認爲這將是更好:

for ($letter = 'a'; $letter < 'zz'; ++$letter) { 
    echo $letter . '<br>'; 
} 

不過,當然,最後的值(zz)沒有顯示,所以我嘗試:

for ($letter = 'a'; $letter < 'aaa'; ++$letter) { 
    echo $letter . '<br>'; 
} 

而且我不知道爲什麼,但它給了我下面的輸出:

a 

所以我試了幾個項目,以及(怪異)的結果是:

項:$letter < 'yz' - 輸出:最高y

項:$letter < 'zzz' - 輸出:最高zzy

我當鏈條以z開頭時,不明白它爲什麼會起作用,但在任何其他情況下(字母)都會失敗。

更改,在$letter < 'aaa'的情況下,它顯示a,但不是下一個。在最壞的情況下,我會預料它會失敗a < 'aaa'等顯示沒有什麼。但不是。

那麼,這種行爲來自哪裏,我錯過了如何比較這些值的東西?

(我不是在尋找一個解決辦法,但一個解釋順便說一句,如果任何解釋配備了一個工作代碼,它是完美的!)

回答

4

比較字母:

$letter < 'yz' 

當你到y,你再增加,並得到z .....字母,z大於yz

如果使用

$letter != 'yz' 

你比較相反,它會給你最多yy

所以

for ($letter = 'a'; $letter !== 'aaa'; ++$letter) { 
    echo $letter . '<br>'; 
} 

將從a放棄,通過zaaab .... azba .. ..到zz

參見this answer和相關評論

編輯

個人而言,我喜歡遞增端點,所以

$start = 'A'; 
$end = 'XFD'; 

$end++; 
for ($char = $start; $char !== $end; ++$char) { 
    echo $char, PHP_EOL; 
} 
+0

坎,在某些時候,我試過'$信!= 'AAA' '但它不起作用,這就是我採用if-break解決方案的原因。一個錯誤的肯定...無論如何,感謝您的鏈接,我無法自己找到這個。令人困惑的概念imho! – Sugar 2014-09-05 15:51:47