搜索
首页php教程php手册分享一段PHP制作的中文拼音首字母工具类,

分享一段PHP制作的中文拼音首字母工具类,

代码很简单,这里就不多BB了,大家看注释吧,注释都看不懂的小伙伴,求放过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         {
            if ($i >= $start && $i             {
                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))     }
    /**
     * 判断字符串前3个字符是否是ascii字符
     *
     * @param string $str
     * @return bool
     */
    private function _isAsciis($str)
    {
        $len = strlen($str) >= 3 ? 3 : 2;
        $chars = array();
        for ($i = 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         {
            return chr($ascii);  /* 数字 */
        }
        elseif ($ascii >= 65 && $ascii         {
            return chr($ascii);   /* A--Z */
        }
        elseif ($ascii >= 97 && $ascii         {
            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             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]             {
                $lower = (int) $middle + 1;
            }
            else if ($data[$middle] == $code)
            {
                return $data[$middle];
            }
            else
            {
                $upper = (int) $middle - 1;
            }
        }
    }
}

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

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器