美文网首页
获取通讯库中外文首字排序(加强篇)

获取通讯库中外文首字排序(加强篇)

作者: 东西汉 | 来源:发表于2018-07-17 10:06 被阅读0次
  上一篇用到的获取首字母并不全面,对于通讯录中的一些生僻的姓都是返回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;        
     }

相关文章

  • 获取通讯库中外文首字排序(加强篇)

      上一篇用到的获取首字母并不全面,对于通讯录中的一些生僻的姓都是返回NULL的,体验极差。于是在composer...

  • 获取通讯库中外文首字排序(弱鸡篇)

    要做的东西正如标题所述,在网上搜一下不难发现有两位大佬已经写过相关的模块,php根据汉字获取拼音(php基于拼音搜...

  • iOS通讯录开发

    前言 记录下在应用内获取通讯录的相关知识点,涉及到通讯录权限配置,通讯录数据的获取以及数据按首字母排序。 系统通讯...

  • 获取手机通讯录且排序

    嗯,获取通讯录还有问题,使用静态检查发现有内存泄漏的问题就先不写了先把排序加上去 //获取字符串(或汉字)首字母 ...

  • iOS 索引功能

    简介UITableView索引功能是常见的,主要是获取中英文的首字母并排序,系统自带获取首字母 类似获取拼音的第三...

  • 【Java】获取中文首字母

    获取中文首字母 有时候,比如微信上根据名字拼音首字母排序并检索。那么用Java获取中文首字母是怎么实现的呢? 代码...

  • UILocalizedIndexedCollation -- 本

    关于通讯录的项目就会有按首字母或者汉字拼音首字母分组排序索引。说说以前用的就是 比如把汉字转成拼音再排序的方法了,...

  • 本地化下按首字母分组排序的神器——UILocalizedInde

    0x01.引言 最近在整一个通讯录相关的项目,通讯录当然就少不了按首字母或者汉字拼音首字母分组排序索引。因为按照我...

  • PHP 获取字符串的首字母(可以做首字母分类)

    这个方法可以用来做首字母分类类似通讯录首字母排序,或者是按首字母搜索索引一类的~ 测试一下 OK~~

  • CFStringTransform 坑

    项目里面的旧代码有个类似通讯录的需求,通讯录里的联系人根据姓名首字母分section显示。于是就需要获取首字母。原...

网友评论

      本文标题:获取通讯库中外文首字排序(加强篇)

      本文链接:https://www.haomeiwen.com/subject/zskwpftx.html