我刚给出了这个答案:https://stackoverflow.com/a/25688064/2627459以循环字母组合,使用以下代码:
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
开头时,我不知道它为什么会起作用,但在任何其他情况下(字母)它都会失败。
Morover,在$letter < 'aaa'
的情况下,它会显示a
,但不会显示下一个a < 'aaa'
。在最坏的情况下,我原本预计它会因{{1}}而失败,因此显示无。但没有。
那么,这种行为来自哪里,我是否遗漏了PHP如何比较这些值?
(我不是在寻找解决方法,而是在寻找解释。顺便说一句,如果有任何解释附带工作代码,那就完美了!)
答案 0 :(得分:4)
比较是按字母顺序排列的:
$letter < 'yz'
当您到达y
时,您再次递增并按字母顺序获取z
,z
大于yz
如果您使用
$letter != 'yz'
为了进行比较,它会为您提供yy
所以
for ($letter = 'a'; $letter !== 'aaa'; ++$letter) {
echo $letter . '<br>';
}
将从a
,z
,aa
,ab
.... az
,ba
....到zz
。
另见this answer及相关评论
修改强>
我个人喜欢增加端点,所以
$start = 'A';
$end = 'XFD';
$end++;
for ($char = $start; $char !== $end; ++$char) {
echo $char, PHP_EOL;
}