Home  >  Article  >  php教程  >  php获取中文字符拼音首字母实例

php获取中文字符拼音首字母实例

WBOY
WBOYOriginal
2016-05-25 16:44:241150browse

在php中如果我们要获取汉字的拼音第一个字母我们先要了解asc码的范围码了,我们只要知道这个值上下限就可以使用php中的ord来获取我相关的汉字拼音了.

实例1,代码如下:

function getFirstCharter($str) { 
    if (emptyempty($str)) {return '';} 
    $fchar = ord($str{0}); 
    if ($fchar>=ord(&#39;A&#39;) && $fchar<=ord(&#39;z&#39;)) return strtoupper($str{0}); 
    $s1 = iconv(&#39;UTF-8&#39;, &#39;gb2312&#39;, $str); 
    $s2 = iconv(&#39;gb2312&#39;, &#39;UTF-8&#39;, $s1); 
    $s = $s2 == $str ? $s1 : $str; 
    $asc = ord($s{0})*256 + ord($s{1}) - 65536; 
    if ($asc>=-20319 && $asc<=-20284) return &#39;A&#39;; 
    if ($asc>=-20283 && $asc<=-19776) return &#39;B&#39;; 
    if ($asc>=-19775 && $asc<=-19219) return &#39;C&#39;; 
    if ($asc>=-19218 && $asc<=-18711) return &#39;D&#39;; 
    if ($asc>=-18710 && $asc<=-18527) return &#39;E&#39;; 
    if ($asc>=-18526 && $asc<=-18240) return &#39;F&#39;; 
    if ($asc>=-18239 && $asc<=-17923) return &#39;G&#39;; 
    if ($asc>=-17922 && $asc<=-17418) return &#39;H&#39;; 
    if ($asc>=-17417 && $asc<=-16475) return &#39;J&#39;; 
    if ($asc>=-16474 && $asc<=-16213) return &#39;K&#39;; 
    if ($asc>=-16212 && $asc<=-15641) return &#39;L&#39;; 
    if ($asc>=-15640 && $asc<=-15166) return &#39;M&#39;; 
    if ($asc>=-15165 && $asc<=-14923) return &#39;N&#39;; 
    if ($asc>=-14922 && $asc<=-14915) return &#39;O&#39;; 
    if ($asc>=-14914 && $asc<=-14631) return &#39;P&#39;; 
    if ($asc>=-14630 && $asc<=-14150) return &#39;Q&#39;; 
    if ($asc>=-14149 && $asc<=-14091) return &#39;R&#39;; 
    if ($asc>=-14090 && $asc<=-13319) return &#39;S&#39;; 
    if ($asc>=-13318 && $asc<=-12839) return &#39;T&#39;; 
    if ($asc>=-12838 && $asc<=-12557) return &#39;W&#39;; 
    if ($asc>=-12556 && $asc<=-11848) return &#39;X&#39;; 
    if ($asc>=-11847 && $asc<=-11056) return &#39;Y&#39;; 
    if ($asc>=-11055 && $asc<=-10247) return &#39;Z&#39;; 
    return null; 
}

例如:echo getFirstCharter("程序员3aj.cn"); // 结果将输出:C

实例二,代码如下:

<?php 
 
$limit=array( //gb2312 拼音排序 
    array(45217,45252), //A 
    array(45253,45760), //B 
    array(45761,46317), //C 
    array(46318,46825), //D 
    array(46826,47009), //E 
    array(47010,47296), //F 
    array(47297,47613), //G 
    array(47614,48118), //H 
    array(0,0),         //I 
    array(48119,49061), //J 
    array(49062,49323), //K 
    array(49324,49895), //L 
    array(49896,50370), //M 
    array(50371,50613), //N 
    array(50614,50621), //O 
    array(50622,50905), //P 
    array(50906,51386), //Q 
    array(51387,51445), //R 
    array(51446,52217), //S 
    array(52218,52697), //T 
    array(0,0),         //U 
    array(0,0),         //V 
    array(52698,52979), //W 
    array(52980,53688), //X 
    array(53689,54480), //Y 
    array(54481,55289), //Z 
); 
 
$str="A:这是一个测试程序1"; 
$str= iconv("UTF-8","gb2312", $str); 
echo $str."</br>"; 
$i=0; 
while($i<strlen($str) ) { 
    $tmp=bin2hex(substr($str,$i,1)); 
    if($tmp>=&#39;B0&#39;){ //汉字的开始 
        $t=getLetter(hexdec(bin2hex(substr($str,$i,2)))); 
        printf("%c",$t==-1 ? &#39;*&#39; : $t ); 
        $i+=2; 
    } 
    else{ 
        printf("%s",substr($str,$i,1)); 
        $i++; 
    } 
} 
 
function getLetter($num){ 
    global $limit; 
    $char_index=65; 
    foreach($limit as $k=>$v){ 
        if($num>=$v[0] && $num<=$v[1]){ 
            $char_index+=$k; 
            return $char_index; 
        } 
    } 
    return -1; 
}


教程网址:

欢迎收藏∩_∩但请保留本文链接。

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn