最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2014年12月11日 08:57:04   投稿:hebedich  
這篇文章主要介紹了分享一段PHP制作的中文拼音首字母工具類的代碼,非常的實用,推薦給有相同需求的童鞋們。

代碼很簡單,這里就不多BB了,大家看注釋吧,注釋都看不懂的小伙伴,求放過PHP!?。?/p>

復制代碼 代碼如下:

<?php
/**
* 漢字拼音首字母工具類
*  注: 英文的字串:不變返回(包括數(shù)字)    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;
    /**
     * 構造函數(shù), 指定需要的編碼 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;
    }
    /**
     * 字符串切分為數(shù)組 (漢字或者一個字符為單位)
     *
     * @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);  /* 數(shù)字 */
        }
        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;
            }
        }
    }
}

取漢字首字母算是目前幾乎沒個項目中都需要用到的功能了,這里給大家推薦的是效率比較高的代碼,也是在本人項目中使用的,小伙伴們如發(fā)現(xiàn)問題,還請留言,大家共同進步

相關文章

  • THINKPHP5.1 Config的配置與獲取詳解

    THINKPHP5.1 Config的配置與獲取詳解

    這篇文章主要介紹了THINKPHP5.1 Config的配置與獲取詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-06-06
  • PHP運用foreach神奇的轉換數(shù)組(實例講解)

    PHP運用foreach神奇的轉換數(shù)組(實例講解)

    下面小編就為大家分享一篇PHP運用foreach神奇的轉換數(shù)組(實例講解),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-02-02
  • Laravel 4 初級教程之視圖、命名空間、路由

    Laravel 4 初級教程之視圖、命名空間、路由

    本文是Laravel 4初級教程的第二篇,學習進入深水區(qū),我在本篇教程中將重點講解視圖常用規(guī)則,命名空間(重難點),和路由(難點)。
    2014-10-10
  • PHP的switch判斷語句的“高級”用法詳解

    PHP的switch判斷語句的“高級”用法詳解

    這篇文章主要介紹了PHP的switch判斷語句的“高級”用法詳解,其實本文講解的還是它的基礎用法,需要的朋友可以參考下
    2014-10-10
  • PHP如何防止用戶重復提交表單

    PHP如何防止用戶重復提交表單

    這篇文章主要介紹了PHP如何防止用戶重復提交表單,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-12-12
  • php多文件上傳下載示例分享

    php多文件上傳下載示例分享

    這篇文章主要介紹了php多文件上傳下載示例,需要的朋友可以參考下
    2014-02-02
  • Smarty模板引擎緩存機制詳解

    Smarty模板引擎緩存機制詳解

    這篇文章主要介紹了Smarty模板引擎緩存機制,結合實例形式分析了Smarty模板引擎緩存機制的原理,開啟與使用方法以及相關注意事項,需要的朋友可以參考下
    2016-05-05
  • PHP增刪改查項目的實戰(zhàn)詳解

    PHP增刪改查項目的實戰(zhàn)詳解

    這篇文章主要為大家詳細介紹了PHP增刪改查項目,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • PHP CURL中傳遞cookie的方法步驟

    PHP CURL中傳遞cookie的方法步驟

    這篇文章主要介紹了PHP CURL中傳遞cookie的方法步驟,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05
  • Thinkphp中數(shù)據(jù)按分類嵌套循環(huán)實現(xiàn)方法

    Thinkphp中數(shù)據(jù)按分類嵌套循環(huán)實現(xiàn)方法

    這篇文章主要介紹了Thinkphp中數(shù)據(jù)按分類嵌套循環(huán)實現(xiàn)方法,適用于嵌套循環(huán)具有關聯(lián)性的情況,是比較實用的技巧,需要的朋友可以參考下
    2014-10-10

最新評論

阿克苏市| 邹平县| 黔东| 天峻县| 昌宁县| 成安县| 徐汇区| 沂水县| 唐山市| 余江县| 庐江县| 樟树市| 武夷山市| 罗源县| 桃江县| 文化| 固阳县| 乌兰察布市| 黑水县| 五指山市| 武鸣县| 郁南县| 丰县| 乾安县| 霸州市| 武山县| 临海市| 公主岭市| 安图县| 晋州市| 江达县| 蒲城县| 宁远县| 延寿县| 靖远县| 安康市| 乐陵市| 龙胜| 五峰| 锡林郭勒盟| 汉中市|