金沙官网线上【收藏】php生成中文汉字首拼音实

一、公司同事整理的类,挺实用的.相信拿出来分享下他不会介意的OO.不过如果首字母是数字或英文会有些问题.复制代码 代码如下:/*** Helper_Spell 汉字拼音首字母工具类** @category Helper* @package Helper_Spell* @author Lancer * @version 1.0* @see Translation_Big2gb*/

 代码如下

class Helper_Spell {/*** $_pinyins* @var array* @access private*/private $_pinyins = array( 176161 => 'A', 176197 => 'B', 178193 => 'C', 180238 => 'D', 182234 => 'E', 183162 => 'F', 184193 => 'G', 185254 => 'H', 187247 => 'J', 191166 => 'K', 192172 => 'L', 194232 => 'M', 196195 => 'N', 197182 => 'O', 197190 => 'P', 198218 => 'Q', 200187 => 'R', 200246 => 'S', 203250 => 'T', 205218 => 'W', 206244 => 'X', 209185 => 'Y', 212209 => 'Z', 215249 => 'Z',);

<?php
/**
* 汉字拼音首字母工具类
*  注: 英文的字串:不变返回(包括数字)    eg .abc123 => abc123
*      中文字符串:返回拼音首字符        eg. 湖南 => HN
*      中英混合串: 返回拼音首字符和英文   eg. 我i我j => WIWJ
*  eg.
*  $py = new str2PY();

*  $result = $py->getInitials('周杰伦');
*
*  //获取首字母
*  $result = $py->getFirstString('abc');  //A
*  $resutl = $py->getFirstString("一聚教程"); //y
*
*/

/*** $_charset* @var string* @access private*/private $_charset = null;/*** __construct 构造函数, 指定需要的编码 default: utf-8 支持utf-8, gb2312** @param unknown_type $charset*/public function __construct { $this->_charset = $charset;}

class str2py
{

金沙官网线上,/*** getInitialsFirst 返回首个汉字的拼音** @access public* @static* @param string $str* @return string* @example Helper_Spell::getInitialsFirst; => w*/public static function getInitialsFirst( $str, $charset = 'utf-8' ) { $chars = array( 'A','B','C','D','E','F', 'G','H','I','J','K','L', 'M','N','O','P','Q','R', 'S','T','U','V','W','X', 'Y','Z');

    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;

$string = self::getInitials; $length = strlen;

    /**
     * 构造函数, 指定需要的编码 default: utf-8
     * 支持utf-8, gb2312
     *
     * @param unknown_type $charset
     */
    public function __construct($charset = 'utf-8')
    {
        $this->_charset = $charset;
    }

for($i=0; $i < $length; $i++) { if ( in_array( $string{$i}, $chars ) ) { return $string{$i}; } } return '*';}

    /**
     * 中文字符串 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;
    }

/*** getInitials 返回拼音组合** @access public* @static* @param string $str* @return string* @example Helper_Spell::getInitials; => wda*/public static function getInitials( $str, $charset = 'utf-8' ) { $instance = new Helper_Spell; return $instance->_getInitials;}

    /**
     * 字符串切分为数组 (汉字或者一个字符为单位)
     *
     * @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;
    }

/*** _getInitials 获取中文字串的拼音首字符* 注:英文的字串:不变返回 eg .abc123 => abc123* 中文字符串:返回拼音首字符 eg. 王小明 => WXM* 中英混合串: 返回拼音首字符和英文 eg. 我i我j => WIWJ** @access private* @param string $str* @return string*/private function _getInitials( $str, $translation=TRUE ){ if return ''; if ( $this->_isAscii && $this->_isAsciis return $str; if $str = Translation_Big2gb::big2gb; $result = array(); if ( $this->_charset == 'utf-8' ){ //IGNORE很重要,加上这个就可以是ICONV()函数忽略错误,继续执行 $str = iconv( 'utf-8', 'gbk//IGNORE', $str ); } $words = $this->_cutWord;

    /**
     * 判断字符是否是ascii字符
     *
     * @param string $char
     * @return bool
     */
    private function _isAscii($char)
    {
        return ( ord(substr($char, 0, 1)) < 160 );
    }

foreach { if ( $this->_isAscii {//非中文 $result[] = $word; continue; } $code = ( ord * 1000 + )); //获取拼音首字母A--Z

    /**
     * 判断字符串前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;
    }

if ( ($i = $this->_search{ $result[] = $this->_pinyins[$i]; } } return strtoupper;}

    /**
     * 获取中文字串的拼音首字符
     *
     * @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));
    }

/*** _msubstr 获取中文字符串** @access private* @param string $str* @param int $start* @param int $len* @return string*/private function _msubstr { $start = $start * 2; $len = $len * 2; $strlen = strlen; $result = ''; for ( $i = 0; $i < $strlen; $i++ ) { if ( $i >= $start && $i < { if ( ord > 129 ) $result .= substr; else $result .= substr; } if ( ord > 129 ) $i++; } return $result;}

    /**
     *  20140624 wangtianbao 获取首字母
     *  @param string $str
     *  @return string
     */
    public function getFirstString($str)
    {
        //先把中文转换成字母
        $new_string = $this->getInitials($str);

/*** _cutWord 字符串切分为数组 ** @access private* @param string $str* @return array*/private function _cutWord { $words = array(); while { if ( $this->_isAscii {//非中文 $words[] = $str[0]; $str = substr( $str, strlen; } else { $word = $this->_msubstr; $words[] = $word; $str = substr ); } } return $words;}

        if (empty($new_string))
        {
            return '';
        }
        else
        {
            return strtoupper(substr($new_string, 0, 1));
        }
    }

/*** _isAscii 判断字符是否是ascii字符** @access private* @param string $char* @return bool*/private function _isAscii { return ( ord < 160 );}

    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 '-'; /* 其他 */
        }
    }

/*** _isAsciis 判断字符串前3个字符是否是ascii字符** @access private* @param string $str* @return bool*/private function _isAsciis { $len = strlen >= 3 ? 3: 2; $chars = array(); for( $i = 1; $i < $len -1; $i++ ){ $chars[] = $this->_isAscii ? 'yes':'no'; } $result = array_count_values; if ){ return true; } return false;}

    /**
     * 查找需要的汉字内码(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;
            }
        }
    }

/*** _getChar 通过ASC码返回字母或者数字** @access private* @param string $ascii* @return string*/private function _getChar{ if ( $ascii >= 48 && $ascii <= 57 ) { return chr; //数字 } elseif ( $ascii>=65 && $ascii<=90 ) { return chr; // A--Z } elseif ($ascii>=97 && $ascii<=122 ) { return chr; // a--z } else { return '~'; //其他 }}

}

本文由金沙官网线上发布于编程,转载请注明出处:金沙官网线上【收藏】php生成中文汉字首拼音实

您可能还会对下面的文章感兴趣: