上一篇用到的获取首字母并不全面,对于通讯录中的一些生僻的姓都是返回NULL的,体验极差。于是在composer库中找到了基于词库的中文转拼音优质解决方案,同时附上一位大神的使用手册更准确的 PHP 汉字转拼音解决方案,于是上一个接口也就变成下面的
<?php
/**
*
* @authors ZL
* @email 987968469@qq.com
* @date 2017-12-14 11:23:35
*/
namespace app\contact\model;
use think\Model;
use think\Db;
use contact\Contact as ContactName;
use Overtrue\Pinyin\Pinyin;
class Contact extends Model {
/**
* 河长通讯录
* @return bool|\think\response\Json
*/
public function getContactList(){
$data = Db::name('admin_user')->alias('au')
->join('river_level rl','au.level = rl.id','left')
->field(['au.id userId','au.user_name userName','au.mobile','rl.level_name levelName','au.department','au.position','au.department_tel'])
->where("au.status",1)
->order('CONVERT(au.user_name USING gbk)')
->select()
;//Dump($data);die;
//旧方法获取首字母,有些字获取不到
// $firstName = new ContactName;
// 小内存型
$pinyin = new Pinyin(); // 默认
// 内存型
// $pinyin = new Pinyin('Overtrue\Pinyin\MemoryFileDictLoader');
// I/O型
// $pinyin = new Pinyin('Overtrue\Pinyin\GeneratorFileDictLoader');
$aaa = $bbb = $ccc = array();
foreach($data as $k => $v){
$firstPinYin = $pinyin->name(mb_substr(trim($v['userName']), 0,1));
$firstCharacter = strtoupper(substr($firstPinYin[0], 0, 1)) ;
//$firstCharacter = $firstName->_getFirstCharacter($v['userName']);
if(in_array($firstCharacter,$bbb)){
array_push($ccc,$v);
$bbb['contact'] = $ccc;
}else{
array_push($aaa,$bbb);
$bbb['firstPY'] = $firstCharacter;
$ccc = array();
array_push($ccc,$v);
$bbb['contact'] = $ccc;
}
}
array_push($aaa,$bbb);
array_shift($aaa);
return $aaa;
}
网友评论