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

首頁 > 語言 > PHP > 正文

php獲取漢字首字母的函數

2024-09-04 11:49:52
字體:
來源:轉載
供稿:網友

本文介紹用php實現漢字轉化為首字母的方法,主要功能是:功能明確,易于修改維護和擴展; 英文的字串:不變返回(包括數字);中文字符串:返回拼音首字符; 中英混合串: 返回拼音首字符和英文

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

  1. <?php  
  2.  /** 
  3. * Modified by http://iulog.com @ 2013-05-07 
  4. * 修復二分法查找方法 
  5. * 漢字拼音首字母工具類 
  6. *  注: 英文的字串:不變返回(包括數字)    eg .abc123 => abc123 
  7. *      中文字符串:返回拼音首字符        eg. 測試字符串 => CSZFC 
  8. *      中英混合串: 返回拼音首字符和英文   eg. 我i我j => WIWJ 
  9. *  eg. 
  10. *  $py = new str2PY(); 
  11. *  $result = $py->getInitials('啊吧才的餓飛就好i就看了嗎你哦平去人是他uv我想一在'); 
  12. */ 
  13. class str2PY 
  14.     private $_pinyins = array
  15.         176161 => 'A'
  16.         176197 => 'B'
  17.         178193 => 'C'
  18.         180238 => 'D'
  19.         182234 => 'E'
  20.         183162 => 'F'
  21.         184193 => 'G'
  22.         185254 => 'H'
  23.         187247 => 'J'
  24.         191166 => 'K'
  25.         192172 => 'L'
  26.         194232 => 'M'
  27.         196195 => 'N'
  28.         197182 => 'O'
  29.         197190 => 'P'
  30.         198218 => 'Q'
  31.         200187 => 'R'
  32.         200246 => 'S'
  33.         203250 => 'T'
  34.         205218 => 'W'
  35.         206244 => 'X'
  36.         209185 => 'Y'
  37.         212209 => 'Z'
  38.     ); 
  39.     private $_charset = null; 
  40.     /** 
  41.      * 構造函數, 指定需要的編碼 default: utf-8 
  42.      * 支持utf-8, gb2312 
  43.      * 
  44.      * @param unknown_type $charset 
  45.      */ 
  46.     public function __construct( $charset = 'utf-8' ) 
  47.     { 
  48.         $this->_charset    = $charset
  49.     } 
  50.     /** 
  51.      * 中文字符串 substr 
  52.      * 
  53.      * @param string $str 
  54.      * @param int    $start 
  55.      * @param int    $len 
  56.      * @return string 
  57.      */ 
  58.     private function _msubstr ($str$start$len
  59.     { 
  60.         $start  = $start * 2; 
  61.         $len    = $len * 2; 
  62.         $strlen = strlen($str); 
  63.         $result = ''
  64.         for ( $i = 0; $i < $strlen$i++ ) { 
  65.             if ( $i >= $start && $i < ($start + $len) ) { 
  66.                 if ( ord(substr($str$i, 1)) > 129 ) $result .= substr($str$i, 2); 
  67.                 else $result .= substr($str$i, 1); 
  68.             } 
  69.             if ( ord(substr($str$i, 1)) > 129 ) $i++; 
  70.         } 
  71.         return $result
  72.     } 
  73.     /** 
  74.      * 字符串切分為數組 (漢字或者一個字符為單位) 
  75.      * 
  76.      * @param string $str 
  77.      * @return array 
  78.      */ 
  79.     private function _cutWord( $str ) 
  80.     { 
  81.         $words = array(); 
  82.          while ( $str != "" ) 
  83.          { 
  84.             if ( $this->_isAscii($str) ) {/*非中文*/ 
  85.                 $words[] = $str[0]; 
  86.                 $str = substr$strstrlen($str[0]) ); 
  87.             }else
  88.                 $word = $this->_msubstr( $str, 0, 1 ); 
  89.                 $words[] = $word
  90.                 $str = substr$strstrlen($word) ); 
  91.             } 
  92.          } 
  93.          return $words
  94.     } 
  95.     /** 
  96.      * 判斷字符是否是ascii字符 
  97.      * 
  98.      * @param string $char 
  99.      * @return bool 
  100.      */ 
  101.     private function _isAscii( $char ) 
  102.     { 
  103.         return ( ord( substr($char,0,1) ) < 160 ); 
  104.     } 
  105.     /** 
  106.      * 判斷字符串前3個字符是否是ascii字符 
  107.      * 
  108.      * @param string $str 
  109.      * @return bool 
  110.      */ 
  111.     private function _isAsciis( $str ) 
  112.     { 
  113.         $len = strlen($str) >= 3 ? 3: 2; 
  114.         $chars = array(); 
  115.         for$i = 1; $i < $len -1; $i++ ){ 
  116.             $chars[] = $this->_isAscii( $str[$i] ) ? 'yes':'no'
  117.         } 
  118.         $result = array_count_values$chars ); 
  119.         if ( emptyempty($result['no']) ){ 
  120.             return true; 
  121.         } 
  122.         return false; 
  123.     } 
  124.     /** 
  125.      * 獲取中文字串的拼音首字符 
  126.      * 
  127.      * @param string $str 
  128.      * @return string 
  129.      */ 
  130.     public function getInitials( $str ) 
  131.     { 
  132.         if ( emptyempty($str) ) return ''
  133.         if ( $this->_isAscii($str[0]) && $this->_isAsciis( $str )){ 
  134.             return $str
  135.         } 
  136.         $result = array(); 
  137.         if ( $this->_charset == 'utf-8' ){ 
  138.             $str = iconv( 'utf-8''gb2312'$str ); 
  139.         } 
  140.         $words = $this->_cutWord( $str ); 
  141.         foreach ( $words as $word ) 
  142.         { 
  143.             if ( $this->_isAscii($word) ) {/*非中文*/ 
  144.                 $result[] = $word
  145.                 continue
  146.             } 
  147.             $code = ord( substr($word,0,1) ) * 1000 + ord( substr($word,1,1) ); 
  148.             /*獲取拼音首字母A--Z*/ 
  149.             if ( ($i = $this->_search($code)) != -1 ){ 
  150.                 $result[] = $this->_pinyins[$i]; 
  151.             } 
  152.         } 
  153.         return strtoupper(implode('',$result)); 
  154.     } 
  155.     private function _getChar( $ascii ) 
  156.     { 
  157.         if ( $ascii >= 48 && $ascii <= 57){ 
  158.             return chr($ascii);  /*數字*/ 
  159.         }elseif ( $ascii>=65 && $ascii<=90 ){ 
  160.             return chr($ascii);   /* A--Z*/ 
  161.         }elseif ($ascii>=97 && $ascii<=122){ 
  162.             return chr($ascii-32); /* a--z*/ 
  163.         }else
  164.             return '-'/*其他*/ 
  165.         } 
  166.     } 
  167.  
  168.     /** 
  169.      * 查找需要的漢字內碼(gb2312) 對應的拼音字符( 二分法 ) 
  170.      * 
  171.      * @param int $code 
  172.      * @return int 
  173.      */ 
  174.     private function _search( $code ) 
  175.     { 
  176.         $data = array_keys($this->_pinyins); 
  177.         $lower = 0; 
  178.         $upper = sizeof($data)-1; 
  179.   $middle = (int) round(($lower + $upper) / 2); 
  180.         if ( $code < $data[0] ) return -1; 
  181.         for (;;) { 
  182.             if ( $lower > $upper ){ 
  183.                 return $data[$lower-1]; 
  184.             } 
  185.             $tmp = (int) round(($lower + $upper) / 2); 
  186.             if ( !isset($data[$tmp]) ){ 
  187.     return $data[$middle]; 
  188.             }else{  
  189.     $middle = $tmp
  190.    } 
  191.             if ( $data[$middle] < $code ){ 
  192.                 $lower = (int)$middle + 1; 
  193.             }else if ( $data[$middle] == $code ) { 
  194.                 return $data[$middle]; 
  195.             }else
  196.                 $upper = (int)$middle - 1; 
  197.             }//Vevb.com 
  198.         } 
  199.     } 
  200. ?> 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产午夜一区二区| 不卡av在线播放| 91日韩在线视频| 欧美日韩在线影院| 亚洲成色777777女色窝| 欧美成人性色生活仑片| 国产成人亚洲综合青青| 26uuu另类亚洲欧美日本老年| 亚洲精品乱码久久久久久按摩观| 久久99亚洲精品| 久久久久久久久91| 欧美黑人xxxⅹ高潮交| 欧美黄网免费在线观看| 成人欧美在线观看| 永久免费精品影视网站| 95av在线视频| 成人一区二区电影| 欧美在线免费看| 最近2019中文字幕mv免费看| 午夜精品一区二区三区在线播放| 亚洲精品自拍偷拍| 亚洲欧美制服中文字幕| 最近2019年好看中文字幕视频| 国产91在线高潮白浆在线观看| 久久99热这里只有精品国产| 免费91麻豆精品国产自产在线观看| 超碰91人人草人人干| 国产成人精品久久亚洲高清不卡| 久久久久久亚洲精品中文字幕| 久久精品国产清自在天天线| 欧美日韩成人在线播放| 日本精品一区二区三区在线播放视频| 久久天天躁日日躁| 欧美日韩国产中文精品字幕自在自线| 亚洲精品一区二三区不卡| 成人妇女免费播放久久久| 亚洲欧美国产精品久久久久久久| 日韩电影免费在线观看| www.日韩欧美| 亚洲一区二区三区在线视频| 亚洲色图欧美制服丝袜另类第一页| 日韩av第一页| 91亚洲精品久久久久久久久久久久| 国产日产欧美精品| 欧美色播在线播放| 日韩免费黄色av| 国产免费亚洲高清| 激情av一区二区| 久久国产精品久久精品| 欧美电影免费观看高清完整| 日韩在线视频网站| 色综合伊人色综合网站| 成人免费视频在线观看超级碰| 欧美老肥婆性猛交视频| 亚洲精品综合精品自拍| 九色91av视频| 亚洲福利视频免费观看| 色偷偷噜噜噜亚洲男人| 国产成人在线一区二区| 美女性感视频久久久| 日本午夜精品理论片a级appf发布| 欧美高清自拍一区| 日本韩国在线不卡| 中文字幕在线观看亚洲| 国产精品久久久久久久久久新婚| 色综合色综合网色综合| 欧美激情久久久| 精品福利免费观看| 亚洲午夜精品视频| 亚洲欧美国产精品专区久久| 久久久久中文字幕2018| 亚洲理论片在线观看| 91精品在线播放| 国产精品日日做人人爱| 午夜精品久久久久久久99热浪潮| 91网在线免费观看| 欧美寡妇偷汉性猛交| 亚洲第一精品夜夜躁人人躁| 国产一区二区三区三区在线观看| 欧美日韩福利电影| 久久伊人91精品综合网站| 国产精品91久久久| 国产精品999| 久久在线视频在线| 欧美日韩不卡合集视频| 欧美激情综合色| 亚洲第一免费网站| 在线播放日韩av| 久久男人av资源网站| 久久久久久久久久久成人| 欧美极品欧美精品欧美视频| 国产日韩精品一区二区| 91情侣偷在线精品国产| 午夜精品一区二区三区在线视频| 97精品视频在线观看| 性色av一区二区三区| 国产一区二区三区免费视频| 国产一区二区日韩| 欧美乱妇高清无乱码| 亚洲精品国产精品久久清纯直播| 91精品成人久久| 亚洲高清一二三区| 俺去了亚洲欧美日韩| 欧美人与性动交a欧美精品| 国产精品日本精品| 国产精品自产拍在线观看| 黑人巨大精品欧美一区二区一视频| 日韩精品在线私人| 国产日韩欧美在线视频观看| 精品一区二区三区四区| 日韩av在线精品| 大荫蒂欧美视频另类xxxx| 久久精品中文字幕电影| 国产精品美女久久久免费| 日韩欧美亚洲范冰冰与中字| 麻豆国产va免费精品高清在线| 亚洲午夜av电影| 777精品视频| 亚洲欧美日韩中文在线| 欧美激情视频一区二区三区不卡| 成人妇女免费播放久久久| 91精品久久久久久久久久久久久| 日韩av免费观影| 久久精品免费电影| 久久久精品在线观看| 国产大片精品免费永久看nba| 69国产精品成人在线播放| 亚洲国产小视频在线观看| 亚洲精品电影网在线观看| 国产精品久久久久久久久粉嫩av| 亚洲欧美成人一区二区在线电影| 国产一区二区三区在线播放免费观看| 久久久久久久久久久久久久久久久久av| 亚洲欧美精品在线| 欧美视频免费在线观看| 精品国产网站地址| 欧美性极品xxxx做受| 色综合视频一区中文字幕| 亚洲最大的av网站| 中文字幕亚洲激情| 91久久精品一区| 国产玖玖精品视频| 亚洲自拍偷拍视频| 国内揄拍国内精品少妇国语| 亚洲欧洲高清在线| 91香蕉国产在线观看| 欧美午夜无遮挡| 国产小视频91| 日韩视频免费观看| 欧美一级高清免费| 久久精品久久久久久国产 免费| 亚洲免费伊人电影在线观看av| 欧美高清视频在线播放| 亚洲精品美女免费| 欧美日韩激情视频8区| 69影院欧美专区视频| 一本色道久久综合亚洲精品小说| 亚洲精品自产拍| 日韩久久精品成人| 午夜精品99久久免费| 日韩av电影在线播放| 岛国av午夜精品| 国产精品永久免费| 亚洲色图15p|