一、公司同事整理的类,挺实用的.相信拿出来分享下他不会介意的O(∩_∩)O.不过如果首字母是数字或英文会有些问题.
复制代码 代码如下:
/**
* Helper_Spell 汉字拼音首字母工具类
*
* @category Helper
* @package Helper_Spell
* @author Lancer <lancer.he@gmail.com>
* @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',
);
/**
* $_charset
* @var string
* @access private
*/
private $_charset = null;
/**
* __construct 构造函数, 指定需要的编码 default: utf-8 支持utf-8, gb2312
*
* @param unknown_type $charset
*/
public function __construct( $charset = 'utf-8' ) {
$this->_charset = $charset;
}
/**
* 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');
$string = self::getInitials( $str );
$length = strlen($string);
for($i=0; $i < $length; $i++) {
if ( in_array( $string{$i}, $chars ) ) {
return $string{$i};
}
}
return '*';
}
/**
* 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( $charset );
return $instance->_getInitials( $str );
}
/**
* _getInitials 获取中文字串的拼音首字符
* 注:英文的字串:不变返回(包括数字) eg .abc123 => abc123
* 中文字符串:返回拼音首字符 eg. 王小明 => WXM
* 中英混合串: 返回拼音首字符和英文 eg. 我i我j => WIWJ
*
* @access private
* @param string $str
* @return string
*/
private function _getInitials( $str, $translation=TRUE ){
if ( empty($str) ) return '';
if ( $this->_isAscii($str[0]) && $this->_isAsciis( $str ))
return $str;
if ( $translation )
$str = Translation_Big2gb::big2gb( $str );
$result = array();
if ( $this->_charset == 'utf-8' ){
//IGNORE很重要,加上这个就可以是ICONV()函数忽略错误,继续执行
$str = iconv( 'utf-8', 'gbk//IGNORE', $str );
}
$words = $this->_cutWord( $str );