クラスメートが質問をしました:
コードをコピーします コードは次のとおりです:
for($i = 'A'; $i <= 'Z'; $i++) {
echo $i;
}
出力は次のとおりです:
ABCDEFGHIJKLMNOPQRSTUVWXYZAAABACADEAEAFAGAHAIAJAKALAMANAOAPAQARAS…
PHP マニュアルに手順が記載されています。多くの人が恐れているマニュアルを章ごとによく読んでください:
PHP は、C ではなく文字変数の算術演算を扱う場合、Perl の規則に従います。たとえば、Perl では 'Z'+1 は 'AA' になります。 'Z'+1 は '[ ' ( ord('Z') == 90, ord('[') == 91 ) に変わります。文字変数はインクリメントできますがデクリメントはできず、プレーン ASCII 文字のみであることに注意してください ( a-z および A-Z) がサポートされています。
文字変数の算術演算を処理する場合、PHP は C の習慣ではなく Perl の習慣に従います。たとえば、Perl では 'Z'+1 は 'AA' を取得しますが、C では 'Z'+1 は '[' を取得します (ord('Z') == 90, ord('[') == 91 )。文字変数は増加のみ可能で減少はできず、純粋な文字 (a ~ z および A ~ Z) のみがサポートされることに注意してください。
つまり、次の場合:
コードをコピーします コードは次のとおりです:
$name = "larence";
++$name //は "laruencf" になります
; そして、次のようになります。
コードをコピーします
コードは次のとおりです: $name = "laruence";
--$name //効果はありませんが、"laruence" のままです
したがって、この問題の原因は次のとおりです。 $i = Z の場合、++$i は AA になり、文字列を比較すると、
AA、BB、XX ~ YZ はすべて Z 以下になります。
上記では、文字列定数の内容も含めて、PHP の文字列に対するインクリメンタル操作における文字列定数の分析について紹介しました。PHP チュートリアルに興味のある友人の役に立てば幸いです。