php 汉字转拼音源码

使用方法

$py = new PinYin();

$all_py = $py->get_all_py("吴国伟"); //输出 ['wu','guo','wei'],输出字符串调用join方法,join('',$all_py)

$first_py = $py->get_first_py($all_py);//输出 wgw

$first_letter = $py->get_first_letter($all_py);// 输出 w

源码:

PHP

/**

* +------------------------------------------------------

* PHP 汉字转拼音

* +------------------------------------------------------

* 使用方法:

* $py = new PinYin();

* $all_py = $py->get_all_py("吴国伟"); //输出 ['wu',$all_py)

* $first_py = $py->get_first_py($all_py);//输出 wgw

* $first_letter = $py->get_first_letter($all_py);// 输出 w

*

* +------------------------------------------------------

*/

class PinYin

{

private $dict_list = array(

'a' => -20319,'ai' => -20317,'an' => -20304,'ang' => -20295,'ao' => -20292,

'ba' => -20283,'bai' => -20265,'ban' => -20257,'bang' => -20242,'bao' => -20230,'bei' => -20051,'ben' => -20036,'beng' => -20032,'bi' => -20026,'bian' => -20002,'biao' => -19990,'bie' => -19986,'bin' => -19982,'bing' => -19976,'bo' => -19805,'bu' => -19784,

'ca' => -19775,'cai' => -19774,'can' => -19763,'cang' => -19756,'cao' => -19751,'ce' => -19746,'ceng' => -19741,'cha' => -19739,'chai' => -19728,'chan' => -19725,'chang' => -19715,'chao' => -19540,'che' => -19531,'chen' => -19525,'cheng' => -19515,'chi' => -19500,'chong' => -19484,'chou' => -19479,'chu' => -19467,'chuai' => -19289,'chuan' => -19288,'chuang' => -19281,'chui' => -19275,'chun' => -19270,'chuo' => -19263,'ci' => -19261,'cong' => -19249,'cou' => -19243,'cu' => -19242,'cuan' => -19238,'cui' => -19235,'cun' => -19227,'cuo' => -19224,

'da' => -19218,'dai' => -19212,'dan' => -19038,'dang' => -19023,'dao' => -19018,'de' => -19006,'deng' => -19003,'di' => -18996,'dian' => -18977,'diao' => -18961,'die' => -18952,'ding' => -18783,'diu' => -18774,'dong' => -18773,'dou' => -18763,'du' => -18756,'duan' => -18741,'dui' => -18735,'dun' => -18731,'duo' => -18722,

'e' => -18710,'en' => -18697,'er' => -18696,

'fa' => -18526,'fan' => -18518,'fang' => -18501,'fei' => -18490,'fen' => -18478,'feng' => -18463,'fo' => -18448,'fou' => -18447,'fu' => -18446,

'ga' => -18239,'gai' => -18237,'gan' => -18231,'gang' => -18220,'gao' => -18211,'ge' => -18201,'gei' => -18184,'gen' => -18183,'geng' => -18181,'gong' => -18012,'gou' => -17997,'gu' => -17988,'gua' => -17970,'guai' => -17964,'guan' => -17961,'guang' => -17950,'gui' => -17947,

'gun' => -17931,'guo' => -17928,

'ha' => -17922,'hai' => -17759,'han' => -17752,'hang' => -17733,'hao' => -17730,'he' => -17721,'hei' => -17703,'hen' => -17701,'heng' => -17697,'hong' => -17692,'hou' => -17683,'hu' => -17676,'hua' => -17496,'huai' => -17487,'huan' => -17482,'huang' => -17468,'hui' => -17454,

'hun' => -17433,'huo' => -17427,

'ji' => -17417,'jia' => -17202,'jian' => -17185,'jiang' => -16983,'jiao' => -16970,'jie' => -16942,'jin' => -16915,'jing' => -16733,'jiong' => -16708,'jiu' => -16706,'ju' => -16689,'juan' => -16664,'jue' => -16657,'jun' => -16647,

'ka' => -16474,'kai' => -16470,'kan' => -16465,'kang' => -16459,'kao' => -16452,'ke' => -16448,'ken' => -16433,'keng' => -16429,'kong' => -16427,'kou' => -16423,'ku' => -16419,'kua' => -16412,'kuai' => -16407,'kuan' => -16403,'kuang' => -16401,'kui' => -16393,'kun' => -16220,'kuo' => -16216,

'la' => -16212,'lai' => -16205,'lan' => -16202,'lang' => -16187,'lao' => -16180,'le' => -16171,'lei' => -16169,'leng' => -16158,'li' => -16155,'lia' => -15959,'lian' => -15958,'liang' => -15944,'liao' => -15933,'lie' => -15920,'lin' => -15915,'ling' => -15903,'liu' => -15889,

'long' => -15878,'lou' => -15707,'lu' => -15701,'lv' => -15681,'luan' => -15667,'lue' => -15661,'lun' => -15659,'luo' => -15652,

'ma' => -15640,'mai' => -15631,'man' => -15625,'mang' => -15454,'mao' => -15448,'me' => -15436,'mei' => -15435,'men' => -15419,'meng' => -15416,'mi' => -15408,'mian' => -15394,'miao' => -15385,'mie' => -15377,'min' => -15375,'ming' => -15369,'miu' => -15363,'mo' => -15362,'mou' => -15183,'mu' => -15180,

'na' => -15165,'nai' => -15158,'nan' => -15153,'nang' => -15150,'nao' => -15149,'ne' => -15144,'nei' => -15143,'nen' => -15141,'neng' => -15140,'ni' => -15139,'nian' => -15128,'niang' => -15121,'niao' => -15119,'nie' => -15117,'nin' => -15110,'ning' => -15109,'niu' => -14941,

'nong' => -14937,'nu' => -14933,'nv' => -14930,'nuan' => -14929,'nue' => -14928,'nuo' => -14926,

'o' => -14922,'ou' => -14921,

'pa' => -14914,'pai' => -14908,'pan' => -14902,'pang' => -14894,'pao' => -14889,'pei' => -14882,'pen' => -14873,'peng' => -14871,'pi' => -14857,'pian' => -14678,'piao' => -14674,'pie' => -14670,'pin' => -14668,'ping' => -14663,'po' => -14654,'pu' => -14645,

'qi' => -14630,'qia' => -14594,'qian' => -14429,'qiang' => -14407,'qiao' => -14399,'qie' => -14384,'qin' => -14379,'qing' => -14368,'qiong' => -14355,'qiu' => -14353,'qu' => -14345,'quan' => -14170,'que' => -14159,'qun' => -14151,

'ran' => -14149,'rang' => -14145,'rao' => -14140,'re' => -14137,'ren' => -14135,'reng' => -14125,'ri' => -14123,'rong' => -14122,'rou' => -14112,'ru' => -14109,'ruan' => -14099,'rui' => -14097,'run' => -14094,'ruo' => -14092,

'sa' => -14090,'sai' => -14087,'san' => -14083,'sang' => -13917,'sao' => -13914,'se' => -13910,'sen' => -13907,'seng' => -13906,'sha' => -13905,'shai' => -13896,'shan' => -13894,'shang' => -13878,'shao' => -13870,'she' => -13859,'shen' => -13847,'sheng' => -13831,'shi' => -13658,'shou' => -13611,'shu' => -13601,'shua' => -13406,'shuai' => -13404,'shuan' => -13400,'shuang' => -13398,'shui' => -13395,'shun' => -13391,'shuo' => -13387,'si' => -13383,'song' => -13367,'sou' => -13359,'su' => -13356,'suan' => -13343,'sui' => -13340,'sun' => -13329,'suo' => -13326,

'ta' => -13318,'tai' => -13147,'tan' => -13138,'tang' => -13120,'tao' => -13107,'te' => -13096,'teng' => -13095,'ti' => -13091,'tian' => -13076,'tiao' => -13068,'tie' => -13063,'ting' => -13060,'tong' => -12888,'tou' => -12875,'tu' => -12871,'tuan' => -12860,'tui' => -12858,'tun' => -12852,'tuo' => -12849,

'wa' => -12838,'wai' => -12831,'wan' => -12829,'wang' => -12812,'wei' => -12802,'wen' => -12607,'weng' => -12597,'wo' => -12594,'wu' => -12585,

'xi' => -12556,'xia' => -12359,'xian' => -12346,'xiang' => -12320,'xiao' => -12300,'xie' => -12120,'xin' => -12099,'xing' => -12089,'xiong' => -12074,'xiu' => -12067,'xu' => -12058,'xuan' => -12039,'xue' => -11867,'xun' => -11861,

'ya' => -11847,'yan' => -11831,'yang' => -11798,'yao' => -11781,'ye' => -11604,'yi' => -11589,'yin' => -11536,'ying' => -11358,'yo' => -11340,'yong' => -11339,'you' => -11324,'yu' => -11303,'yuan' => -11097,'yue' => -11077,'yun' => -11067,

'za' => -11055,'zai' => -11052,'zan' => -11045,'zang' => -11041,'zao' => -11038,'ze' => -11024,'zei' => -11020,'zen' => -11019,'zeng' => -11018,'zha' => -11014,'zhai' => -10838,'zhan' => -10832,'zhang' => -10815,'zhao' => -10800,'zhe' => -10790,'zhen' => -10780,'zheng' => -10764,'zhi' => -10587,'zhong' => -10544,'zhou' => -10533,'zhu' => -10519,'zhua' => -10331,'zhuai' => -10329,'zhuan' => -10328,'zhuang' => -10322,'zhui' => -10315,'zhun' => -10309,'zhuo' => -10307,'zi' => -10296,'zong' => -10281,'zou' => -10274,'zu' => -10270,'zuan' => -10262,

'zui' => -10260,'zun' => -10256,'zuo' => -10254

);

/**

* 获取全部拼音,返回拼音的数组,如 '张三丰' ==> ['zhang','san','feng']

* @param $chinese

* @param string $charset

* @return array

*/

public function get_all_py($chinese,$charset = 'utf-8')

{

if ($charset != 'gb2312') $chinese = $this->_U2_Utf8_Gb($chinese);

$py = $this->zh_to_pys($chinese);

return $py;

}

/**

* 获取拼音首字母,如['zhang','feng'] ==> zsf

* @param $all_pys

* @return string

*/

public function get_first_py($all_pys)

{

if (count($all_pys) <= 0) {

return '';

}

$result = [];

foreach ($all_pys as $one) {

if (is_null($one) || strlen($one) <= 0) {

continue;

}

$result[] = substr($one,1);

}

return join('',$result);

}

/**

* 获取拼音首字母,如['zhang','feng'] ==> z

* @param $all_pys

* @return string

*/

public function get_first_letter($all_pys)

{

if (count($all_pys) <= 0) {

return '';

}

foreach ($all_pys as $one) {

if (is_null($one) || strlen($one) <= 0) {

continue;

}

return substr($one,1);

}

return '';

}

private function _U2_Utf8_Gb($_C)

{

$_String = '';

if ($_C < 0x80) $_String .= $_C;

elseif ($_C < 0x800) {

$_String .= chr(0xC0 | $_C >> 6);

$_String .= chr(0x80 | $_C & 0x3F);

} elseif ($_C < 0x10000) {

$_String .= chr(0xE0 | $_C >> 12);

$_String .= chr(0x80 | $_C >> 6 & 0x3F);

$_String .= chr(0x80 | $_C & 0x3F);

} elseif ($_C < 0x200000) {

$_String .= chr(0xF0 | $_C >> 18);

$_String .= chr(0x80 | $_C >> 12 & 0x3F);

$_String .= chr(0x80 | $_C >> 6 & 0x3F);

$_String .= chr(0x80 | $_C & 0x3F);

}

return iconv('UTF-8','GB2312',$_String);

}

private function zh_to_py($num,$blank = '')

{

if ($num > 0 && $num < 160) {

return chr($num);

} elseif ($num < -20319 || $num > -10247) {

return $blank;

} else {

foreach ($this->dict_list as $py => $code) {

if ($code > $num) break;

$result = $py;

}

return $result;

}

}

private function zh_to_pys($chinese)

{

$result = array();

for ($i = 0; $i < strlen($chinese); $i++) {

$p = ord(substr($chinese,$i,1));

if ($p > 160) {

$q = ord(substr($chinese,++$i,1));

$p = $p * 256 + $q - 65536;

}

$result[] = $this->zh_to_py($p);

}

return $result;

}

}

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...