<?php
/**
* 错误状态码定义
* User: xiucai
* Date: 2018/3/11
* Time: 12:23
*/ namespace extend; class Wordsgroup
{ /**
* 二维数组根据首字母分组排序
* @param array $data 二维数组
* @param string $targetKey 首字母的键名
* @return array 根据首字母关联的二维数组
*/
public function groupByInitials(array $data, $targetKey = 'name')
{
$word=[];
foreach ($data as $k=> $v) {
$key=$this->getInitials($v[$targetKey]);
if(isset($word[$key])){
array_push($word[$key],$data[$k]);
}else{
$word[$key][]=$data[$k];
}
} ksort($word);
return $word;
} /**
* 获取首字母
* @param string $str 汉字字符串
* @return string 首字母
*/
public function getInitials($str)
{
error_reporting('E_ALL');
try {
if (empty($str)) {return '';}
$fchar = ord($str{0});
if ($fchar >= ord('A') && $fchar <= ord('z')) {
return strtoupper($str{0});
} $s1 = iconv('UTF-8', 'gb2312', $str);
$s2 = iconv('gb2312', 'UTF-8', $s1);
$s = $s2 == $str ? $s1 : $str;
$asc = ord($s{0}) * 256 + ord($s{1}) - 65536;
if ($asc >= -20319 && $asc <= -20284) {
return 'A';
} if ($asc >= -20283 && $asc <= -19776) {
return 'B';
} if ($asc >= -19775 && $asc <= -19219) {
return 'C';
} if ($asc >= -19218 && $asc <= -18711) {
return 'D';
} if ($asc >= -18710 && $asc <= -18527) {
return 'E';
} if ($asc >= -18526 && $asc <= -18240) {
return 'F';
} if ($asc >= -18239 && $asc <= -17923) {
return 'G';
} if ($asc >= -17922 && $asc <= -17418) {
return 'H';
} if ($asc >= -17417 && $asc <= -16475) {
return 'J';
} if ($asc >= -16474 && $asc <= -16213) {
return 'K';
} if ($asc >= -16212 && $asc <= -15641) {
return 'L';
} if ($asc >= -15640 && $asc <= -15166) {
return 'M';
} if ($asc >= -15165 && $asc <= -14923) {
return 'N';
} if ($asc >= -14922 && $asc <= -14915) {
return 'O';
} if ($asc >= -14914 && $asc <= -14631) {
return 'P';
} if ($asc >= -14630 && $asc <= -14150) {
return 'Q';
} if ($asc >= -14149 && $asc <= -14091) {
return 'R';
} if ($asc >= -14090 && $asc <= -13319) {
return 'S';
} if ($asc >= -13318 && $asc <= -12839) {
return 'T';
} if ($asc >= -12838 && $asc <= -12557) {
return 'W';
} if ($asc >= -12556 && $asc <= -11848) {
return 'X';
} if ($asc >= -11847 && $asc <= -11056) {
return 'Y';
} if ($asc >= -11055 && $asc <= -10247) {
return 'Z';
} return '其他';
}catch (Exception $e) {
return '其他';
}
} }

PHP获取汉字首字母并分组排序的更多相关文章

  1. 获取汉字首字母并分组排列 PHP

    1.代码class Character{ /** * 数组根据首首字母排序 */ /** * 二维数组根据首字母分组排序 * @param array $data 二维数组 * @param stri ...

  2. php获取汉字首字母

    php获取汉字首字母,可以用于按字母对数据进行检索排序等. 分享下网上找的代码.亲测有效. function getFirstCharter($str){ if(empty($str)){return ...

  3. python获取汉字首字母

    获取汉字首字母 关注公众号"轻松学编程"了解更多. 应用场景之一:可用于获取名字首字母,在数据库中查询记录时,可以用它来排序输出. from pytz import unicode ...

  4. JS获取汉字首字母

    //获取 汉字首字母 function makePy(str) { if (typeof (str) != "string") throw new Error(-1, " ...

  5. ASP.NET获取汉字首字母

    /// <summary> /// 获取汉字首字母(可包含多个汉字) /// </summary> /// <param name="strText" ...

  6. JS实现获取汉字首字母拼音、全拼音及混拼音的方法

    本文实例讲述了JS实现获取汉字首字母拼音.全拼音及混拼音的方法.分享给大家供大家参考,具体如下: 这里需要用到一个js获取汉字拼音的插件,可点击此处本站下载. 运行效果如下: 完整示例代码: ? 1 ...

  7. .NET获取汉字首字母

    /// <summary> /// 获取汉字首字母(可包含多个汉字) /// </summary> /// <param name="strText" ...

  8. php获取汉字首字母的函数

    本文介绍用php实现汉字转化为首字母的方法,主要功能是:功能明确,易于修改维护和扩展: 英文的字串:不变返回(包括数字):中文字符串:返回拼音首字符: 中英混合串: 返回拼音首字符和英文. 网上的方法 ...

  9. php获取汉字首字母实例

    在我们实际开发工作中,有时候需要获取输入汉字的首字母,然后存到库中,方便用户搜索相关信息,下面给出php代码,留做备用: //新添加获取汉子首字,首字字母 function pinyin($zh){ ...

随机推荐

  1. Python——Pyqt5(界面)——基本设置

    一.Pycharm外加设置 设置扩展工具 1.Qt Design(图形界面) Program:工程目录\venv\Lib\site-packages\pyqt5-tools\designer.exe  ...

  2. Jenkins+Git+Maven搭建自动化构建平台

    http://blog.csdn.net/xlgen157387/article/details/50353317

  3. Python之Mock的入门

    参考文章: https://segmentfault.com/a/1190000002965620 一.Mock是什么 Mock这个词在英语中有模拟的这个意思,因此我们可以猜测出这个库的主要功能是模拟 ...

  4. Codeforces Round #522 (Div. 2, based on Technocup 2019 Elimination Round 3) D. Barcelonian Distance 几何代数(简单)

    题意:给出一条直线 ax +by+c=0  给出两个整点 (x1,y1) (x2,y2) 只有在x,y坐标至少有一个整点的时 以及   给出的直线才有路径(也就是格子坐标图的线上) 问 两个整点所需要 ...

  5. Ubuntu命令整理

    linux下find命令的使用和总结 - CS408 - 博客园 ubuntu 命令简写和全称 su:Swith user  切换用户,切换到root用户 cat: Concatenate  串联 u ...

  6. P1438 无聊的数列 (差分+线段树)

    题目 P1438 无聊的数列 解析: 先考虑修改,用差分的基本思想,左端点加上首项\(k\),修改区间\((l,r]\)内每个数的差分数组都加上公差\(d\),最后的\(r+1\)再减去\(k+(r- ...

  7. Docke--利用 commit 理解构建镜像

    Docker 利用commit理解构建镜像 镜像是容器的基础,每次执行 docker run 的时候都会指定哪个镜像作为容器运行的基础.当我们使用Docker Hub的镜像无法满足我们的需求时,我们就 ...

  8. Java算法 -- 二分查找

    折半查找,要求待查找的序列有序.每次取中间位置的值与待查关键字比较,如果中间位置的值比待查关键字大,则在前半部分循环这个查找的过程,如果中间位置的值比待查关键字小,则在后半部分循环这个查找的过程.直到 ...

  9. nginx、php-fpm默认配置与性能–TCP socket还是unix domain socket【转】

    原文地址:https://www.cnxct.com/default-configuration-and-performance-of-nginx-phpfpm-and-tcp-socket-or-u ...

  10. node服务端口被占用Error listen EADDRINUSE :::3000

    Error: listen EADDRINUSE: address already in use :::3000,出现这个报错说明3000端口被占用 解决方法:找到占用该端口的程序,kill杀掉它就可 ...