前面文章有提到php获取中文拼音的解决方案,文章链接如下
该方法的优势在于速度够快,不依赖于任何第三方库。但不支持多音字以及音标的获取,现在将借助第三方库解决这个问题
上一篇地址
php获取中文拼音(含生僻字)支持首字母,全拼
引入第三方库
本文范例采用 composer
composer require "overtrue/pinyin:~3.0"
你也可以直接下载
引入(根据资源获取路径选择)
composer 方式
use Overtrue\Pinyin\Pinyin;
require_once 方式
require_once 'PinYin/PinYin.class.php';
核心代码(composer 方式)
/**
* 中文转拼音-支持多音字-音标
* @param string $str utf8字符串
* @param string $ret_format 返回格式 [all:全拼音|first:首字母]
* @param string $space 字符间隔
* @param string $tone 是否获取音标
* @return string 拼音字符串
*/
function pinyinMultitone($str, $ret_format = 'all', $space = " ",$tone = false){
//不提前载入,字典文件在使用时已文件流形式打开并逐行遍历,运用 yield 特性分配内存,对于内存的消耗非常微小,但转换较慢
//$pinyin = new Pinyin('Overtrue\Pinyin\GeneratorFileDictLoader');
//将字典预先载入内存-优点是比较快-适用于内存相对充足的服务器
$pinyin = new Pinyin('Overtrue\Pinyin\MemoryFileDictLoader');
//以上两种二选一
if($tone == true){
$pinyin = $pinyin->convert($str,PINYIN_UNICODE);
}else{
$pinyin = $pinyin->convert($str);
}
$rs = "";
foreach($pinyin as $value){
if($ret_format == "first"){
$chr = mb_substr($value, 0, 1);
$rs.=$chr.$space;
}
else{
$rs .= $value.$space;
}
}
return rtrim($rs, ' ');
}
核心代码(require_once 方式)
require_once 'PinYin/PinYin.class.php';
echo join(' ', PinYin::toPinyin('带着希望旅行,')); # dai zhuo xi wang lv xing ,
echo PHP_EOL;
echo join(' ', PinYin::toPinyin('重庆', true)); # chóng qìng