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

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境
