麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > PHP > 正文

php獲取漢字首字母的函數

2020-03-22 20:14:25
字體:
來源:轉載
供稿:網友
網上的方法有不少,都是一樣的原理,按照需求,做了一下版本的html' target='_blank'>class類文件,主要功能是:功能明確,易于修改維護和擴展; 英文的字串:不變返回(包括數字);中文字符串:返回拼音首字符; 中英混合串: 返回拼音首字符和英文。該算法采用了二分法查找,修復了之前字母Z讀取成Y的錯誤。好東西要收藏,故在此留下印記,以供后人考證!
復制代碼 代碼如下:
?php
/**
* Modified by http://iulog.com @ 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;
}
}
}
}
?
PHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 成人影片在线免费观看 | 国产精品久久久久久久不卡 | 欧美成人性生活片 | 亚洲一区在线视频观看 | 国产精品999在线观看 | 欧美一级高清免费 | 国产美女视频一区 | 国产精品久久久久久久久久iiiii | 久久老司机| 日本欧美一区二区三区在线播 | 欧美精品成人一区二区在线观看 | 污视频在线免费播放 | h视频免费观看 | 91精品国产日韩91久久久久久360 | 久久久毛片视频 | 黄色av网站免费 | 97久久精品一区二区三区观看 | 免费毛片电影 | 男女羞羞的视频 | 一区国产在线观看 | 成人羞羞在线观看网站 | 在线看成人av | 中文字幕 亚洲一区 | 激情在线观看视频 | 一级国产精品一级国产精品片 | 日韩精品 | 羞羞视频在线免费 | 草妞视频 | 免费中文视频 | 国产精品美女久久久免费 | 精品亚洲夜色av98在线观看 | 91精品国产99久久久久久 | 黄色特级大片 | 国产一级免费电影 | 色淫视频| 福利在线小视频 | 国产羞羞视频在线观看 | 全视频tv | 国产亚洲精品久久午夜玫瑰园 | 欧美五月婷婷 | 久久精品二区 |