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

PHP 取得中文字串首字母(拼音首字母)函數實作

     編輯:PHP 綜合知識

函數程式碼

<?php
function chineseFirst($str) {
    $str = iconv("UTF-8", "gb2312", $str); // 若程式為 GBK 編碼請註解此行

    // 判斷是否為中文(雙位元組)
    if (preg_match("/^[\x7f-\xff]/", $str)) {
        $fchar = ord($str{0});
        if ($fchar >= ord("A") && $fchar <= ord("z")) return strtoupper($str{0});

        $a = $str;
        $val = ord($a{0}) * 256 + ord($a{1}) - 65536;

        if ($val >= -20319 && $val <= -20284) return "A";
        if ($val >= -20283 && $val <= -19776) return "B";
        if ($val >= -19775 && $val <= -19219) return "C";
        if ($val >= -19218 && $val <= -18711) return "D";
        if ($val >= -18710 && $val <= -18527) return "E";
        if ($val >= -18526 && $val <= -18240) return "F";
        if ($val >= -18239 && $val <= -17923) return "G";
        if ($val >= -17922 && $val <= -17418) return "H";
        if ($val >= -17417 && $val <= -16475) return "J";
        if ($val >= -16474 && $val <= -16213) return "K";
        if ($val >= -16212 && $val <= -15641) return "L";
        if ($val >= -15640 && $val <= -15166) return "M";
        if ($val >= -15165 && $val <= -14923) return "N";
        if ($val >= -14922 && $val <= -14915) return "O";
        if ($val >= -14914 && $val <= -14631) return "P";
        if ($val >= -14630 && $val <= -14150) return "Q";
        if ($val >= -14149 && $val <= -14091) return "R";
        if ($val >= -14090 && $val <= -13319) return "S";
        if ($val >= -13318 && $val <= -12839) return "T";
        if ($val >= -12838 && $val <= -12557) return "W";
        if ($val >= -12556 && $val <= -11848) return "X";
        if ($val >= -11847 && $val <= -11056) return "Y";
        if ($val >= -11055 && $val <= -10247) return "Z";
    } else {
        return false;
    }
}
?>

原理說明

  • 將 UTF-8 轉 GB2312(內碼),取雙位元組高低位計算內碼值
  • 內碼值減 65536 得到負數區間
  • 根據 GB2312 區位碼對應拼音首字母範圍對照表判斷
  • 非中文輸入返回 false

使用範例

<?php
echo chineseFirst("張三"); // Z
echo chineseFirst("李四"); // L
echo chineseFirst("王五"); // W
?>

注意事項

  • 需開啟 iconv 擴展
  • 僅支援常用漢字範圍,生僻字可能無法正確判斷
  • 專案若為 GBK 編碼,請移除 iconv 轉換行
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved