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

PHP 將駝峰/帕斯卡命名轉換為底線分隔命名(snake_case)

     編輯:PHP 綜合知識

程式碼規範、資料庫欄位對應、API 參數轉換時,常需將 CamelCase 或 PascalCase 轉為 snake_case。本文提供簡潔函式 cc_format(),逐字元判斷大寫並插入底線轉小寫。

函式實作

function cc_format($name) {
    $temp = [];
    for ($i = 0; $i < strlen($name); $i++) {
        $ascii = ord($name[$i]);
        // A-Z: 65-90
        if ($ascii >= 65 && $ascii <= 90) {
            $lower = chr($ascii + 32); // 轉小寫
            if ($i === 0) {
                $temp[] = $lower; // 首字元不加底線
            } else {
                $temp[] = '_' . $lower;
            }
        } else {
            $temp[] = $name[$i];
        }
    }
    return implode('', $temp);
}

測試範例

$cases = [
    'AppPromoZhongQiu2014ActiveStatusSelector',
    'camelCaseExample',
    'PascalCaseExample',
    'already_snake_case',
    'XMLHttpRequest',
    'HTML5Parser',
];

foreach ($cases as $c) {
    echo "$c → " . cc_format($c) . "\n";
}
/* 輸出:
AppPromoZhongQiu2014ActiveStatusSelector → app_promo_zhong_qiu2014_active_status_selector
camelCaseExample → camel_case_example
PascalCaseExample → pascal_case_example
already_snake_case → already_snake_case
XMLHttpRequest → x_m_l_http_request
HTML5Parser → h_t_m_l5_parser
*/

正則替代方案(更簡潔)

function toSnakeCase($str) {
    // 大寫字母前插入底線,全轉小寫,去除開頭底線
    return strtolower(trim(preg_replace('/([A-Z])/', '_$1', $str), '_'));
}

// 測試
echo toSnakeCase('AppPromoZhongQiu2014ActiveStatusSelector');
// app_promo_zhong_qiu2014_active_status_selector

效能比較

  • 逐字元迴圈:無正則編譯開銷,極長字串(>10萬字元)較快。
  • 正則替換:程式碼簡潔,可讀性高,一般長度(<1萬字元)效能差異可忽略。

擴充:支援數字、連續大寫縮寫

function toSnakeCaseAdvanced($str) {
    // 1. 連續大寫視為單詞(如 XML → xml,而非 x_m_l)
    $str = preg_replace('/([A-Z]+)([A-Z][a-z])/', '$1_$2', $str);
    // 2. 小寫/數字接大寫插入底線
    $str = preg_replace('/([a-z0-9])([A-Z])/', '$1_$2', $str);
    return strtolower($str);
}

echo toSnakeCaseAdvanced('XMLHttpRequest'); // xml_http_request
echo toSnakeCaseAdvanced('HTML5Parser');    // html5_parser

根據專案命名規範選擇適合的轉換策略,保持代碼風格一致。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved