コード:
$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?
マニュアルから:
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 ドキュメントにリンクしています。