<?php
for ($i = 'A'; $i <= 'Z'; $i++) {
echo $i;
}
// 輸出:ABCDEFGHIJKLMNOPQRSTUVWXYZAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARAS…
預期只輸出 A-Z,實際卻在 Z 之後繼續輸出 AA、AB… 直到 YZ 才停止。原因在於 PHP 遵循 Perl 而非 C 的字符遞增規則。
PHP follows Perl's convention when dealing with arithmetic operations on character variables and not C's. For example, in Perl ‘Z'+1 turns into ‘AA', while in C ‘Z'+1 turns into ‘[‘ ( ord(‘Z') == 90, ord(‘[‘) == 91 ). Note that character variables can be incremented but not decremented and even so only plain ASCII characters (a-z and A-Z) are supported.
中文意譯:PHP 處理字符變量算術運算時沿用 Perl 慣例。Perl 中 'Z'+1 → 'AA',C 中 'Z'+1 → '['(ASCII 90→91)。字符變量只能遞增不能遞減,僅支援純 ASCII 字母(a-z、A-Z)。
--$name 無效果,值不變$name = "laruence"; ++$name → "laruencf"(最後一字符 f←e+1)$name = "laruence";
++$name; // "laruencf"
$name = "laruence";
--$name; // 無效,仍為 "laruence"
for ($i = 'A'; $i <= 'Z'; $i++) 中:
'AA' <= 'Z' → true(字典序 AA 排在 Z 前)// 方法一:範圍配合 foreach
foreach (range('A', 'Z') as $char) {
echo $char;
}
// 方法二:ord/chr 配合數值循環
for ($code = ord('A'); $code <= ord('Z'); $code++) {
echo chr($code);
}
// 方法三:手動 break
for ($i = 'A'; ; $i++) {
echo $i;
if ($i === 'Z') break;
}
chr()PHP 字符串遞增是 Perl 風格的 26 進制進位,僅支援純字母遞增、不支援遞減。理解此機制能避免循環邊界錯誤,並可巧妙用於列名生成等場景。