php提取字符串拼音首字母(支持多音字)

网上查到的版本都不支持多音字提取,以前用过一个JS的支持多音字提取的函数,就把PHP版本和JS版本综合了一下,写了个类,希望对开发者有用。

<?

//示例

$m=new makePy;

// $m->code='GBK'; //设定编码类别,默认为utf-8

$s="阿Q正传";

echo $m->getstr($s);

//输出结果:AQZZ|EQZZ|AQZC|EQZC


//正文



 
class makePy{
var $code='utf-8';
function getPy($str)
{$code=$this->code;
 $arr=array();
 for($i=0,$len=mb_strlen($str,$code);$i<$len;$i++)
  {$single=mb_substr( $str,$i,1,$code);
   $ch =$this->utf8_unicode($single,$code);//获得unicode码
   $w=$this->py_mult_list[$ch];
   $arr[]=($w)?$w:$this->getfirstchar($single);
   }
  $result=array("");
  foreach($arr as $v)
   {$result=$this->makePY_list($v,$result);
   }
 return implode("|",$result);
}


function makePY_list($str,$arr)
{for($i=0,$len=strlen($str);$i<$len;$i++)
  {foreach($arr as $t)
     {$re[]=$t.$str[$i];}
  }
 return $re;
}


//读取utf8字符的unicode码
function utf8_unicode($c,$charset="utf-8") {
 if($charset!="utf-8"){
  $c = iconv($charset,"utf-8",$c);
 }
 switch(strlen($c)) {
 case 1:
  return ord($c);
 case 2:
  $n = (ord($c[0]) & 0x3f) << 6;
  $n += ord($c[1]) & 0x3f;
  return $n;
 case 3:
  $n = (ord($c[0]) & 0x1f) << 12;
  $n += (ord($c[1]) & 0x3f) << 6;
  $n += ord($c[2]) & 0x3f;
  return $n;
 case 4:
  $n = (ord($c[0]) & 0x0f) << 18;
  $n += (ord($c[1]) & 0x3f) << 12;
  $n += (ord($c[2]) & 0x3f) << 6;
  $n += ord($c[3]) & 0x3f;
  return $n;
 }
}


//获得单个汉字拼音首字母
function getfirstchar($s0) {
$fchar = ord($s0 {
0 });
if ($fchar >= ord("A") and $fchar <= ord("z"))
return strtoupper($s0 {
0 });
$s1 = iconv("UTF-8","gb2312",$s0);
$s2 = iconv("gb2312", "UTF-8", $s1);
if ($s2 == $s0) {
$s = $s1;
} else {
$s = $s0;
}
$asc = ord($s {
0 }) * 256 + ord($s {
1 }) - 65536;
if ($asc >= -20319 and $asc <= -20284)
return "A";
if ($asc >= -20283 and $asc <= -19776)
return "B";
if ($asc >= -19775 and $asc <= -19219)
return "C";
if ($asc >= -19218 and $asc <= -18711)
return "D";
if ($asc >= -18710 and $asc <= -18527)
return "E";
if ($asc >= -18526 and $asc <= -18240)
return "F";
if ($asc >= -18239 and $asc <= -17923)
return "G";
if ($asc >= -17922 and $asc <= -17418)
return "H";
if ($asc >= -17417 and $asc <= -16475)
return "J";
if ($asc >= -16474 and $asc <= -16213)
return "K";
if ($asc >= -16212 and $asc <= -15641)
return "L";
if ($asc >= -15640 and $asc <= -15166)
return "M";
if ($asc >= -15165 and $asc <= -14923)
return "N";
if ($asc >= -14922 and $asc <= -14915)
return "O";
if ($asc >= -14914 and $asc <= -14631)
return "P";
if ($asc >= -14630 and $asc <= -14150)
return "Q";
if ($asc >= -14149 and $asc <= -14091)
return "R";
if ($asc >= -14090 and $asc <= -13319)
return "S";
if ($asc >= -13318 and $asc <= -12839)
return "T";
if ($asc >= -12838 and $asc <= -12557)
return "W";
if ($asc >= -12556 and $asc <= -11848)
return "X";
if ($asc >= -11847 and $asc <= -11056)
return "Y";
if ($asc >= -11055 and $asc <= -10247)
return "Z";
return null;
}
var $py_mult_list=array("19969"=>"DZ","19975"=>"WM","19988"=>"QJ","20048"=>"YL","20056"=>"SC","20060"=>"NM","20094"=>"QG","20127"=>"QJ","20167"=>"QC","20193"=>"YG","20250"=>"KH","20256"=>"ZC","20282"=>"SC","20285"=>"QJG","20291"=>"TD","20314"=>"YD","20340"=>"NE","20375"=>"TD","20389"=>"YJ","20391"=>"CZ","20415"=>"PB","20446"=>"YS","20447"=>"SQ","20504"=>"TC","20608"=>"KG","20854"=>"QJ","20857"=>"ZC","20911"=>"PF","20504"=>"TC","20608"=>"KG","20854"=>"QJ","20857"=>"ZC","20911"=>"PF","20985"=>"AW","21032"=>"PB","21048"=>"XQ","21049"=>"SC","21089"=>"YS","21119"=>"JC","21242"=>"SB","21273"=>"SC","21305"=>"YP","21306"=>"QO","21330"=>"ZC","21333"=>"SDC","21345"=>"QK","21378"=>"CA","21397"=>"SC","21414"=>"XS","21442"=>"SC","21477"=>"JG","21480"=>"TD","21484"=>"ZS","21494"=>"YX","21505"=>"YX","21512"=>"HG","21523"=>"XH","21537"=>"PB","21542"=>"PF","21549"=>"KH","21571"=>"E","21574"=>"DA","21588"=>"TD","21589"=>"O","21618"=>"ZC","21621"=>"KHA","21632"=>"ZJ","21654"=>"KG","21679"=>"LKG","21683"=>"KH","21710"=>"A","21719"=>"YH","21734"=>"WOE","21769"=>"A","21780"=>"WN","21804"=>"XH","21834"=>"A","21899"=>"ZD","21903"=>"RN","21908"=>"WO","21939"=>"ZC","21956"=>"SA","21964"=>"YA","21970"=>"TD","22003"=>"A","22031"=>"JG","22040"=>"XS","22060"=>"ZC","22066"=>"ZC","22079"=>"MH","22129"=>"XJ","22179"=>"XA","22237"=>"NJ","22244"=>"TD","22280"=>"JQ","22300"=>"YH","22313"=>"XW","22331"=>"YQ","22343"=>"YJ","22351"=>"PH","22395"=>"DC","22412"=>"TD","22484"=>"PB","22500"=>"PB","22534"=>"ZD","22549"=>"DH","22561"=>"PB","22612"=>"TD","22771"=>"KQ","22831"=>"HB","22841"=>"JG","22855"=>"QJ","22865"=>"XQ","23013"=>"ML","23081"=>"WM","23487"=>"SX","23558"=>"QJ","23561"=>"YW","23586"=>"YW","23614"=>"YW","23615"=>"SN","23631"=>"PB","23646"=>"ZS","23663"=>"ZT","23673"=>"YG","23762"=>"TD","23769"=>"ZS","23780"=>"QJ","23884"=>"QK","24055"=>"XH","24113"=>"DC","24162"=>"ZC","24191"=>"GA","24273"=>"QJ","24324"=>"NL","24377"=>"TD","24378"=>"QJ","24439"=>"PF","24554"=>"ZS","24683"=>"TD","24694"=>"WE","24733"=>"LK","24925"=>"TN","25094"=>"ZG","25100"=>"XQ","25103"=>"XH","25153"=>"PB","25170"=>"PB","25179"=>"KG","25203"=>"PB","25240"=>"ZS","25282"=>"FB","25303"=>"NA","25324"=>"KG","25341"=>"ZY","25373"=>"WZ","25375"=>"XJ","25384"=>"A","25457"=>"A","25528"=>"SD","25530"=>"SC","25552"=>"TD","25774"=>"ZC","25874"=>"ZC","26044"=>"YW","26080"=>"WM","26292"=>"PB","26333"=>"PB","26355"=>"ZY","26366"=>"CZ","26397"=>"ZC","26399"=>"QJ","26415"=>"ZS","26451"=>"SB","26526"=>"ZC","26552"=>"JG","26561"=>"TD","26588"=>"JG","26597"=>"CZ","26629"=>"ZS","26638"=>"YL","26646"=>"XQ","26653"=>"KG","26657"=>"XJ","26727"=>"HG","26894"=>"ZC","26937"=>"ZS","26946"=>"ZC","26999"=>"KJ","27099"=>"KJ","27449"=>"YQ","27481"=>"XS","27542"=>"ZS","27663"=>"ZS","27748"=>"TS","27784"=>"SC","27788"=>"ZD","27795"=>"TD","27812"=>"O","27850"=>"PB","27852"=>"MB","27895"=>"SL","27898"=>"PL","27973"=>"QJ","27981"=>"KH","27986"=>"HX","27994"=>"XJ","28044"=>"YC","28065"=>"WG","28177"=>"SM","28267"=>"QJ","28291"=>"KH","28337"=>"ZQ","28463"=>"TL","28548"=>"DC","28601"=>"TD","28689"=>"PB","28805"=>"JG","28820"=>"QG","28846"=>"PB","28952"=>"TD","28975"=>"ZC","29100"=>"A","29325"=>"QJ","29575"=>"SL","29602"=>"FB","30010"=>"TD","30044"=>"CX","30058"=>"PF","30091"=>"YSP","30111"=>"YN","30229"=>"XJ","30427"=>"SC","30465"=>"SX","30631"=>"YQ","30655"=>"QJ","30684"=>"QJG","30707"=>"SD","30729"=>"XH","30796"=>"LG","30917"=>"PB","31074"=>"NM","31085"=>"JZ","31109"=>"SC","31181"=>"ZC","31192"=>"MLB","31293"=>"JQ","31400"=>"YX","31584"=>"YJ","31896"=>"ZN","31909"=>"ZY","31995"=>"XJ","32321"=>"PF","32327"=>"ZY","32418"=>"HG","32420"=>"XQ","32421"=>"HG","32438"=>"LG","32473"=>"GJ","32488"=>"TD","32521"=>"QJ","32527"=>"PB","32562"=>"ZSQ","32564"=>"JZ","32735"=>"ZD","32793"=>"PB","33071"=>"PF","33098"=>"XL","33100"=>"YA","33152"=>"PB","33261"=>"CX","33324"=>"BP","33333"=>"TD","33406"=>"YA","33426"=>"WM","33432"=>"PB","33445"=>"JG","33486"=>"ZN","33493"=>"TS","33507"=>"QJ","33540"=>"QJ","33544"=>"ZC","33564"=>"XQ","33617"=>"YT","33632"=>"QJ","33636"=>"XH","33637"=>"YX","33694"=>"WG","33705"=>"PF","33728"=>"YW","33882"=>"SR","34067"=>"WM","34074"=>"YW","34121"=>"QJ","34255"=>"ZC","34259"=>"XL","34425"=>"JH","34430"=>"XH","34485"=>"KH","34503"=>"YS","34532"=>"HG","34552"=>"XS","34558"=>"YE","34593"=>"ZL","34660"=>"YQ","34892"=>"XH","34928"=>"SC","34999"=>"QJ","35048"=>"PB","35059"=>"SC","35098"=>"ZC","35203"=>"TQ","35265"=>"JX","35299"=>"JX","35782"=>"SZ","35828"=>"YS","35830"=>"E","35843"=>"TD","35895"=>"YG","35977"=>"MH","36158"=>"JG","36228"=>"QJ","36426"=>"XQ","36466"=>"DC","36710"=>"JC","36711"=>"ZYG","36767"=>"PB","36866"=>"SK","36951"=>"YW","37034"=>"YX","37063"=>"XH","37218"=>"ZC","37325"=>"ZC","38063"=>"PB","38079"=>"TD","38085"=>"QY","38107"=>"DC","38116"=>"TD","38123"=>"YD","38224"=>"HG","38241"=>"XTC","38271"=>"ZC","38415"=>"YE","38426"=>"KH","38461"=>"YD","38463"=>"AE","38466"=>"PB","38477"=>"XJ","38518"=>"YT","38551"=>"WK","38585"=>"ZC","38704"=>"XS","38739"=>"LJ","38761"=>"GJ","38808"=>"SQ","39048"=>"JG","39049"=>"XJ","39052"=>"HG","39076"=>"CZ","39271"=>"XT","39534"=>"TD","39552"=>"TD","39584"=>"PB","39647"=>"SB","39730"=>"LG","39748"=>"TPB","40109"=>"ZQ","40479"=>"ND","40516"=>"HG","40536"=>"HG","40583"=>"QJ","40765"=>"YQ","40784"=>"QJ","40840"=>"YK","40863"=>"QJG");

}

没有更多推荐了,返回首页