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

前端之家收集整理的这篇文章主要介绍了分享一段PHP制作的中文拼音首字母工具类前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

代码如下:
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 @H_404_6@= $start && $i < ($start + $len)) { if (ord(substr($str,$i,1)) > 129) { $result .= substr($str,2); } else { $result .= substr($str,1); } } if (ord(substr($str,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,1); $words[] = $word; $str = substr($str,strlen($word)); } } return $words; } /** * 判断字符是否是ascii字符 * * @param string $char * @return bool */ private function _isAscii($char) { return ( ord(substr($char,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,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,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; } } } }

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

原文链接:https://www.f2er.com/php/23122.html

猜你在找的PHP相关文章