根據中文姓名或者其他中英文混合字串獲取拼音首字母

2021-07-16 21:14:47 字數 2673 閱讀 8843

<?php 

/*** modified by fuyong @ 2015-09-13

* 修復二分法查詢方法

* 漢字拼音首字母工具類

* 注: 英文的字串:不變返回(包括數字) eg .abc123 => abc123

* 中文字串:返回拼音首字元 eg. 測試字串 => cszfc

* 中英混合串: 返回拼音首字元和英文 eg. 我i我j => wiwj

* eg.

* $py = new pinyinfirstchar();

* $result = $py->getinitials('我想和你在一起');

* $result = $py->getfirstchar('小時候我就想和你在一起');

*///下面3行測試**

$py = new pinyinfirstchar();

$result = $py->getfirstchar('根據中文姓名');

print_r($result);

class

pinyinfirstchar

/*** 中文字串 substr

**@param string $str

*@param int $start

*@param int $len

*@return string

*/private

function

_msubstr

($str, $start, $len)

if ( ord(substr($str, $i, 1)) > 129 ) $i++;

}return

$result;

}/**

* 字串切分為陣列 (漢字或者乙個字元為單位)

**@param string $str

*@return array

*/private

function

_cutword

( $str )

else

}return

$words;

}/**

* 判斷字元是否是ascii字元

**@param string $char

*@return bool

*/private

function

_isascii

( $char )

/*** 判斷字串前3個字元是否是ascii字元

**@param string $str

*@return bool

*/private

function

_isasciis

( $str )

$result = array_count_values( $chars );

if ( empty($result['no']) )

return

false;

}/**

* 獲取中文字串的拼音首字元

**@param string $str

*@return string

*/public

function

getinitials

( $str )

$result = array();

if ( $this->_charset == 'utf-8' )

$words = $this->_cutword( $str );

foreach ( $words

as$word )

$code = ord( substr($word,0,1) ) * 1000 + ord( substr($word,1,1) );

/*獲取拼音首字母a--z*/

if ( ($i = $this->_search($code)) != -1 )

}return strtoupper(implode('',$result));

}private

function

_getchar

( $ascii )

elseif ( $ascii>=65 && $ascii

<=90 )elseif ($ascii>=97 && $ascii

<=122)else

}/**

* 查詢需要的漢字內碼(gb2312) 對應的拼音字元( 二分法 )

**@param int $code

*@return int

*/private

function

_search

( $code )

$tmp = (int) round(($lower + $upper) / 2);

if ( !isset($data[$tmp]) )else

if ( $data[$middle] < $code )else

if ( $data[$middle] == $code ) else}}

/*** 獲取一整串中文字串的拼音首字元(只返回1個字元)

**@param string $str

*@return string

*/public

function

getfirstchar

( $str )

}?>

FLEX 中英文姓名校驗器 VALIDATOR

為我那個無聊的緣分測試程式所寫的中英文名字校驗器,希望對大家能有作用 package com.love static public function isasciiletter n number boolean static public function ischinesecharacter n ...

中英文本元混合處理方法

1,txt檔案匯入sql時 303410001401?600 lang 4 t粵ig?0220?011840628900000?bpo 303410001501?600 landau中er?0220?011840628900000?bpo 303410001601?600 lang 6 t漢ig?0...

只針對中英文混合分詞的中文分詞器

該版本說明 1 只針對中英文混合分詞 需要一些中文和英文連在一起 設定如下 utility.seperatop e 1234567890公升級到 例子 worker work new worker utility.seperatop e 1234567890公升級到年月號m string resul...