首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 字符串遞增運算奧秘:Perl 風格字母進位,從 Z 到 AA 的陷阱與應用

     編輯:PHP 綜合知識

現象演示

<?php
for ($i = 'A'; $i <= 'Z'; $i++) {
    echo $i . ' ';
}
// 輸出: A B C ... Z AA AB AC ... YZ
// 死循環!因為 'AA' <= 'Z' 為 true(字符串比較)

語言規範來源

PHP 沿襲 Perl 風格:字符變量遞增按字母表進位。
'Z' + 1 → 'AA','z' + 1 → 'aa','9' + 1 → '10'(數字按數值進位)。
只能遞增,不能遞減;僅支持純 ASCII 字母(a-z, A-Z)和數字(0-9)。

原理解析

  • 遞增操作符 ++$str 會從右向左處理字符:
  • 字母:a..y → 後一字母,z → a 並向左進位。
  • 數字:0..8 → 後一數字,9 → 0 並向左進位。
  • 混合:'A9' → 'B0','Z9' → 'AA0'。

陷阱與避坑

  1. 循環終止條件失效:$i <= 'Z' 在 'AA' 時仍為 true。
    修正:for ($i = 'A'; $i !== 'AA'; $i++) 或 foreach (range('A', 'Z') as $i)。
  2. 非純字母數字字符串:++$str 無效果(如含 -、_、中文)。
  3. 遞減無效:--$str 不報錯但不變化。

實用場景

  • Excel 列名生成:A, B, ... Z, AA, AB ... → function colName($n) { for($c='A'; $n--; $c++); return $c; }
  • 短域名/邀請碼生成:base36 變體。
  • 測試數據批量生成:user_001, user_002 ...。

最佳實踐

// 安全生成 Excel 列名
function excel_col(int $index): string { // 1-based
    $col = '';
    while ($index > 0) {
        $index--;
        $col = chr(65 + ($index % 26)) . $col;
        $index = intdiv($index, 26);
    }
    return $col;
}
// 測試
for ($i = 1; $i <= 702; $i++) { // A..ZZ
    echo excel_col($i) . ' ';
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved