亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PHP > 正文

php獲取漢字首字母的函數

2024-05-04 23:19:23
字體:
來源:轉載
供稿:網友

網上的方法有不少,都是一樣的原理,按照需求,做了一下版本的class類文件,主要功能是:功能明確,易于修改維護和擴展; 英文的字串:不變返回(包括數字);中文字符串:返回拼音首字符; 中英混合串: 返回拼音首字符和英文。該算法采用了二分法查找,修復了之前字母Z讀取成Y的錯誤。好東西要收藏,故在此留下印記,以供后人考證!

復制代碼 代碼如下:


<?php
 /**
* Modified by @ 2013-05-07
* 修復二分法查找方法
* 漢字拼音首字母工具類
*  注: 英文的字串:不變返回(包括數字)    eg .abc123 => abc123
*      中文字符串:返回拼音首字符        eg. 測試字符串 => CSZFC
*      中英混合串: 返回拼音首字符和英文   eg. 我i我j => WIWJ
*  eg.
*  $py = new str2PY();
*  $result = $py->getInitials('啊吧才的餓飛就好i就看了嗎你哦平去人是他uv我想一在');
*/
class str2PY
{
    private $_pinyins = array(
        176161 => 'A',
        176197 => 'B',
        178193 => 'C',
        180238 => 'D',
        182234 => 'E',
        183162 => 'F',
        184193 => 'G',
        185254 => 'H',
        187247 => 'J',
        191166 => 'K',
        192172 => 'L',
        194232 => 'M',
        196195 => 'N',
        197182 => 'O',
        197190 => 'P',
        198218 => 'Q',
        200187 => 'R',
        200246 => 'S',
        203250 => 'T',
        205218 => 'W',
        206244 => 'X',
        209185 => 'Y',
        212209 => 'Z',
    );
    private $_charset = null;
    /**
     * 構造函數, 指定需要的編碼 default: utf-8
     * 支持utf-8, gb2312
     *
     * @param unknown_type $charset
     */
    public function __construct( $charset = 'utf-8' )
    {
        $this->_charset    = $charset;
    }
    /**
     * 中文字符串 substr
     *
     * @param string $str
     * @param int    $start
     * @param int    $len
     * @return string
     */
    private function _msubstr ($str, $start, $len)
    {
        $start  = $start * 2;
        $len    = $len * 2;
        $strlen = strlen($str);
        $result = '';
        for ( $i = 0; $i < $strlen; $i++ ) {
            if ( $i >= $start && $i < ($start + $len) ) {
                if ( ord(substr($str, $i, 1)) > 129 ) $result .= substr($str, $i, 2);
                else $result .= substr($str, $i, 1);
            }
            if ( ord(substr($str, $i, 1)) > 129 ) $i++;
        }
        return $result;
    }
    /**
     * 字符串切分為數組 (漢字或者一個字符為單位)
     *
     * @param string $str
     * @return array
     */
    private function _cutWord( $str )
    {
        $words = array();
         while ( $str != "" )
         {
            if ( $this->_isAscii($str) ) {/*非中文*/
                $words[] = $str[0];
                $str = substr( $str, strlen($str[0]) );
            }else{
                $word = $this->_msubstr( $str, 0, 1 );
                $words[] = $word;
                $str = substr( $str, strlen($word) );
            }
         }
         return $words;
    }
    /**
     * 判斷字符是否是ascii字符
     *
     * @param string $char
     * @return bool
     */
    private function _isAscii( $char )
    {
        return ( ord( substr($char,0,1) ) < 160 );
    }
    /**
     * 判斷字符串前3個字符是否是ascii字符
     *
     * @param string $str
     * @return bool
     */
    private function _isAsciis( $str )
    {
        $len = strlen($str) >= 3 ? 3: 2;
        $chars = array();
        for( $i = 1; $i < $len -1; $i++ ){
            $chars[] = $this->_isAscii( $str[$i] ) ? 'yes':'no';
        }
        $result = array_count_values( $chars );
        if ( empty($result['no']) ){
            return true;
        }
        return false;
    }
    /**
     * 獲取中文字串的拼音首字符
     *
     * @param string $str
     * @return string
     */
    public function getInitials( $str )
    {
        if ( empty($str) ) return '';
        if ( $this->_isAscii($str[0]) && $this->_isAsciis( $str )){
            return $str;
        }
        $result = array();
        if ( $this->_charset == 'utf-8' ){
            $str = iconv( 'utf-8', 'gb2312', $str );
        }
        $words = $this->_cutWord( $str );
        foreach ( $words as $word )
        {
            if ( $this->_isAscii($word) ) {/*非中文*/
                $result[] = $word;
                continue;
            }
            $code = ord( substr($word,0,1) ) * 1000 + ord( substr($word,1,1) );
            /*獲取拼音首字母A--Z*/
            if ( ($i = $this->_search($code)) != -1 ){
                $result[] = $this->_pinyins[$i];
            }
        }
        return strtoupper(implode('',$result));
    }
    private function _getChar( $ascii )
    {
        if ( $ascii >= 48 && $ascii <= 57){
            return chr($ascii);  /*數字*/
        }elseif ( $ascii>=65 && $ascii<=90 ){
            return chr($ascii);   /* A--Z*/
        }elseif ($ascii>=97 && $ascii<=122){
            return chr($ascii-32); /* a--z*/
        }else{
            return '-'; /*其他*/
        }
    }

    /**
     * 查找需要的漢字內碼(gb2312) 對應的拼音字符( 二分法 )
     *
     * @param int $code
     * @return int
     */
    private function _search( $code )
    {
        $data = array_keys($this->_pinyins);
        $lower = 0;
        $upper = sizeof($data)-1;
  $middle = (int) round(($lower + $upper) / 2);
        if ( $code < $data[0] ) return -1;
        for (;;) {
            if ( $lower > $upper ){
                return $data[$lower-1];
            }
            $tmp = (int) round(($lower + $upper) / 2);
            if ( !isset($data[$tmp]) ){
    return $data[$middle];
            }else{
    $middle = $tmp;
   }
            if ( $data[$middle] < $code ){
                $lower = (int)$middle + 1;
            }else if ( $data[$middle] == $code ) {
                return $data[$middle];
            }else{
                $upper = (int)$middle - 1;
            }
        }
    }
}
?>

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美自拍视频在线| 中文字幕在线视频日韩| 国产一区二区三区在线| 日韩一区二区欧美| 欧美成人免费播放| 性色av一区二区三区在线观看| 亚洲第一视频在线观看| 欧美野外猛男的大粗鳮| 欧美中文在线字幕| 亚洲男人第一av网站| 日韩欧美一区二区三区| 欧美极品少妇与黑人| 亚洲福利视频网| 国产婷婷97碰碰久久人人蜜臀| 久精品免费视频| 在线日韩av观看| 97精品一区二区三区| 国产欧美在线观看| 日韩精品视频在线播放| 亚洲国产精品999| 亚洲精品久久久久中文字幕欢迎你| 久久理论片午夜琪琪电影网| 91影视免费在线观看| 亚洲天堂网在线观看| 最新国产精品拍自在线播放| 成人精品久久一区二区三区| 777午夜精品福利在线观看| 久久久久久高潮国产精品视| 欧美一级片在线播放| 久久精品国产v日韩v亚洲| 欧美性xxxxxxx| 日韩免费在线看| 国产精品入口夜色视频大尺度| 国语自产精品视频在免费| 国产亚洲精品久久久| 91tv亚洲精品香蕉国产一区7ujn| 91久久精品国产91久久| 欧美午夜美女看片| 国产精品免费一区豆花| 91精品国产高清自在线| 欧美日韩国产区| 日韩一二三在线视频播| 精品亚洲一区二区三区| 91在线免费视频| 亚洲精品成a人在线观看| 亚洲图片欧洲图片av| 91av国产在线| 欧美激情第99页| 日韩在线视频国产| 91精品国产综合久久男男| 国产视频自拍一区| 欧美性黄网官网| 国产精品一区二区性色av| 日韩av中文字幕在线| 91禁国产网站| 最新亚洲国产精品| 日韩美女视频中文字幕| 国产精品高潮呻吟久久av黑人| 亚洲国产日韩欧美在线99| 97国产一区二区精品久久呦| 日韩综合视频在线观看| 欧日韩在线观看| 在线日韩av观看| 欧美日韩国产第一页| 亚洲综合精品伊人久久| 国语对白做受69| 按摩亚洲人久久| 国产日韩换脸av一区在线观看| 色与欲影视天天看综合网| 欧美国产亚洲视频| 国产一区二区三区在线观看视频| 成人深夜直播免费观看| 性欧美长视频免费观看不卡| 亚洲欧美日韩视频一区| 亚洲精品国产精品久久清纯直播| 欧美日韩美女在线观看| 欧美大肥婆大肥bbbbb| 亚洲va国产va天堂va久久| 国产精品美女999| 亚洲精品91美女久久久久久久| 丁香五六月婷婷久久激情| 欧美午夜女人视频在线| 日韩电影免费观看在线| 久久久国产精品x99av| 国产精品成人aaaaa网站| 午夜剧场成人观在线视频免费观看| 正在播放亚洲1区| 中文字幕综合一区| 亚洲黄色有码视频| 久久久中文字幕| 国产成人aa精品一区在线播放| 亚洲精品乱码久久久久久金桔影视| 色偷偷av亚洲男人的天堂| 91经典在线视频| 成人在线免费观看视视频| 国产成人在线视频| 中文字幕日韩精品有码视频| 久久久精品亚洲| 国产精品久久久久久久美男| 国产第一区电影| 欧美激情在线观看视频| 国产精品免费看久久久香蕉| 精品国产福利视频| 日韩激情片免费| 亚洲影院色无极综合| 国产视频自拍一区| 亚洲一区第一页| 久久精品美女视频网站| 美女久久久久久久久久久| 欧美激情精品久久久久久蜜臀| 亚洲色在线视频| 一区二区三区 在线观看视| 91免费视频国产| 国产精品视频1区| 国产亚洲人成a一在线v站| 97成人超碰免| 久久久国产精品x99av| 国产成人avxxxxx在线看| 欧美电影在线观看完整版| 性夜试看影院91社区| 欧美中文字幕在线播放| 国产成人精品视频| 亚洲日本aⅴ片在线观看香蕉| 久久久久久久一区二区| 97欧美精品一区二区三区| 欧美大片免费看| 9.1国产丝袜在线观看| 久久久爽爽爽美女图片| 欧美日韩精品在线视频| 色诱女教师一区二区三区| 91亚洲国产成人久久精品网站| 欧美专区日韩视频| 精品亚洲va在线va天堂资源站| 久久久精品国产网站| **欧美日韩vr在线| 日韩av在线网址| 在线观看日韩www视频免费| 国产一区二区三区在线视频| 伊人久久精品视频| 国产精品久久久久7777婷婷| 日韩av电影院| 国产精品96久久久久久又黄又硬| 精品国产91久久久久久老师| 国产成人极品视频| 在线成人激情视频| 色综合伊人色综合网站| 欧美寡妇偷汉性猛交| 欧美国产日韩中文字幕在线| 成人激情视频在线观看| 亚洲色图日韩av| 久久国产精品亚洲| 欧美在线一区二区三区四| 国产精品久久久久久久app| 欧美精品一区三区| 欧美极品少妇与黑人| 日韩大陆毛片av| 亚洲国产精品久久久久秋霞蜜臀| 国产精品精品久久久| 主播福利视频一区| 欧美成人精品三级在线观看| 日韩高清电影好看的电视剧电影| 久久久久久这里只有精品| 91亚洲一区精品| 777午夜精品福利在线观看|