在for循环中递增字符可以工作,但递减字符不行?

3

我在做一些练习时发现了这段代码(它会产生“1. 项目A”,“2. 项目B”等):

echo "\n<ol>";
for ($x='A'; $x<'G'; $x++){
    echo "<li>Item $x</li>\n";
}
echo "\n</ol>";

好奇心驱使我尝试反向操作(会产生无限循环的Z):

echo "\n<ol>";
for ($x = 'Z'; $x > 'M'; $x--){
    echo "<li>Item $x</li>\n";
}
echo "\n</ol>";

这里我错过了什么?

由于某种原因,-- 在字符串字符上不起作用。而且递增一个字符在技术上应该被视为一个错误。请注意,$x++$x = $x + 1; 是相同的,所以如果你执行 $x = 'A' + 1;$x = 'Z' - 1,两者都应该计算为 0,当字符被转换为整数时。 - Marc B
1个回答

4
PHP在处理字符变量的算术运算时,遵循Perl的约定而非C语言的约定。例如,在PHP和Perl中,$a='Z'; $a++;将$a变成'AA',而在C语言中,a='Z'; a++;将a变成'['('Z'的ASCII值为90,'['的ASCII值为91)。请注意,字符变量可以递增但不可以递减,即使递增/递减其他字符变量也没有效果,原始字符串也不会改变。只支持普通ASCII字母和数字(a-z,A-Z和0-9)。

来源:PHP手册链接

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接