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

  上一篇用到的获取首字母并不全面,对于通讯录中的一些生僻的姓都是返回NULL的,体验极差。于是在composer库中找到了基于词库的中文转拼音优质解决方案,同时附上一位大神的使用手册更准确的 PHP 汉字转拼音解决方案,于是上一个接口也就变成下面的
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;        
     }

你可能感兴趣的:(获取通讯库中外文首字排序(加强篇))