我刚刚给出了这个答案: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
开始时它会工作,但在任何其他情况下都会失败(字母)。
此外,在$letter < 'aaa'
的情况下,它显示a
,但不显示下一个。在最坏的情况下,我本以为a < 'aaa'
会失败,因此显示什么都不显示。但是没有。
那么,这种行为是从哪里来的呢?我是否遗漏了PHP如何比较这些值的内容?
(我不是在寻找一个变通方法,而是一个解释。顺便说一句,如果有任何解释伴随着一个工作代码,那就太完美了!)
比较按字母顺序排列:
$letter < 'yz'
当你到达y
时,你再次递增,得到z
。。。。。按字母顺序,z
大于yz
如果您使用
$letter != 'yz'
相反,对于您的比较,它将为您提供yy
所以
for ($letter = 'a'; $letter !== 'aaa'; ++$letter) {
echo $letter . '<br>';
}
将从a
开始,通过z
、aa
、ab
。。。。az
、ba
。。。。直到CCD_ 23。
另请参阅此答案和相关评论
编辑
就我个人而言,我喜欢增加端点,所以
$start = 'A';
$end = 'XFD';
$end++;
for ($char = $start; $char !== $end; ++$char) {
echo $char, PHP_EOL;
}