代码:
$a = "2c0";
for($i = 0; $i < 25; $i++) {
print "$a ";
$a++;
}
输出:
2c0 2c1 2c2 2c3 2c4 2c5 2c6 2c7 2c8 2c9 2d0 2d1 2d2 2d3 2d4 2d5 2d6 2d7 2d8 2d9 2e0 3 4 5 6
为什么,php?
代码:
$a = "2c0";
for($i = 0; $i < 25; $i++) {
print "$a ";
$a++;
}
输出:
2c0 2c1 2c2 2c3 2c4 2c5 2c6 2c7 2c8 2c9 2d0 2d1 2d2 2d3 2d4 2d5 2d6 2d7 2d8 2d9 2e0 3 4 5 6
为什么,php?
2e0
被解释为2 * 10^0
(见PHP exponentiation),即 2。因此下一个值将是 3。
从手册:
PHP 在处理字符变量而不是 C 的算术运算时遵循 Perl 的约定。例如,在 PHP 和 Perl 中 $a = 'Z'; $a++; 将 $a 变成 'AA',而在 C 中 a = 'Z'; 一个++;将 a 转换为 '['('Z' 的 ASCII 值是 90,'[' 的 ASCII 值是 91)。请注意,字符变量可以递增但不能递减,即使如此,也仅支持纯 ASCII 字母和数字(az、AZ 和 0-9)。增加/减少其他字符变量没有效果,原字符串不变。
++
在“2c0”上使用运算符会导致 PHP 增加字符串值,即“2c1”。“2e0”被视为科学记数法,即2 * 10^0 = 2
,因此递增得到3
。
请参阅此博客文章:http ://blog.rstack.cc/post/2a0_misunderstanding - 它解释了问题并链接了 php 文档以供参考。