代码很简单,这里就不多BB了,大家看注释吧,注释都看不懂的小伙伴,求放过PHP!!!

复制代码 代码如下:<?php/*** 汉字拼音首字母工具类*  注: 英文的字串:不变返回(包括数字)    eg .abc123 => abc123*      中文字符串:返回拼音首字符        eg. 测试字符串 => CSZFC*      中英混合串: 返回拼音首字符和英文   eg. 我i我j => WIWJ*  eg.*  $py = new str2PY();*  *  $result = $py->getInitials("周杰伦");**  //获取首字母*  $result = $py->getFirstString("abc");  //A*  $resutl = $py->getFirstString("周杰伦"); //Z**/class str2py{    private $_pinyins = array(=> "A",=> "B",=> "C",=> "D",=> "E",=> "F",=> "G",=> "H",=> "J",=> "K",=> "L",=> "M",=> "N",=> "O",=> "P",=> "Q",=> "R",=> "S",=> "T",=> "W",=> "X",=> "Y",=> "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));    }    /**     *  20140624 wangtianbao 获取首字母     *  @param string $str     *  @return string     */    public function getFirstString($str)    {        //先把中文转换成字母        $new_string = $this->getInitials($str);        if (empty($new_string))        {            return "";        }        else        {            return strtoupper(substr($new_string, 0, 1));        }    }    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;            }        }    }}

取汉字首字母算是目前几乎没个项目中都需要用到的功能了,这里给大家推荐的是效率比较高的代码,也是在本人项目中使用的,小伙伴们如发现问题,还请留言,大家共同进步