PHP中文字母名字排序

public function getFirstChar($name)
{
    $surname = mb_substr($name, 0, 3); //获取名字的姓
    $name = iconv('UTF-8', 'gb2312', $surname); //将UTF-8转换成GB2312编码

    if (ord($surname) > 128) { //汉字开头,汉字没有以U、V开头的
        $asc = ord($name{0}) * 256 + ord($name{1}) - 65536;
        if ($asc >= -20319 and $asc <= -20284) {
            return ["id" => 65, "hierarchy" => "A"];
        }
        if ($asc >= -20283 and $asc <= -19776) {
            return ["id" => 66, "hierarchy" => "B"];
        }
        if ($asc >= -19775 and $asc <= -19219) {
            return ["id" => 67, "hierarchy" => "C"];
        }
        if ($asc >= -19218 and $asc <= -18711) {
            return ["id" => 68, "hierarchy" => "D"];
        }
        if ($asc >= -18710 and $asc <= -18527) {
            return ["id" => 69, "hierarchy" => "E"];
        }
        if ($asc >= -18526 and $asc <= -18240) {
            return ["id" => 70, "hierarchy" => "F"];
        }
        if ($asc >= -18239 and $asc <= -17760) {
            return ["id" => 71, "hierarchy" => "G"];
        }
        if ($asc >= -17759 and $asc <= -17248) {
            return ["id" => 72, "hierarchy" => "H"];
        }
        if ($asc >= -17247 and $asc <= -17418) {
            return ["id" => 73, "hierarchy" => "I"];
        }
        if ($asc >= -17417 and $asc <= -16475) {
            return ["id" => 74, "hierarchy" => "J"];
        }
        if ($asc >= -16474 and $asc <= -16213) {
            return ["id" => 75, "hierarchy" => "K"];
        }
        if ($asc >= -16212 and $asc <= -15641) {
            return ["id" => 76, "hierarchy" => "L"];
        }
        if ($asc >= -15640 and $asc <= -15166) {
            return ["id" => 77, "hierarchy" => "M"];
        }
        if ($asc >= -15165 and $asc <= -14923) {
            return ["id" => 78, "hierarchy" => "N"];
        }
        if ($asc >= -14922 and $asc <= -14915) {
            return ["id" => 79, "hierarchy" => "O"];
        }
        if ($asc >= -14914 and $asc <= -14631) {
            return ["id" => 80, "hierarchy" => "P"];
        }
        if ($asc >= -14630 and $asc <= -14150) {
            return ["id" => 81, "hierarchy" => "Q"];
        }
        if ($asc >= -14149 and $asc <= -14091) {
            return ["id" => 82, "hierarchy" => "R"];
        }
        if ($asc >= -14090 and $asc <= -13319) {
            return ["id" => 83, "hierarchy" => "S"];
        }
        if ($asc >= -13318 and $asc <= -12839) {
            return ["id" => 84, "hierarchy" => "T"];
        }
        if ($asc >= -12838 and $asc <= -12557) {
            return ["id" => 87, "hierarchy" => "W"];
        }
        if ($asc >= -12556 and $asc <= -11848) {
            return ["id" => 88, "hierarchy" => "X"];
        }
        if ($asc >= -11847 and $asc <= -11056) {
            return ["id" => 89, "hierarchy" => "Y"];
        }
        if ($asc >= -11055 and $asc <= -10247) {
            return ["id" => 90, "hierarchy" => "Z"];
        }
    } else {
        if (ord($name) >= 48 and ord($name) <= 57) { //数字开头
            switch (iconv_substr($name, 0, 1, 'utf-8')) {
                case 1:
                    return ["id" => 89, "hierarchy" => "Y"];
                case 2:
                    return ["id" => 69, "hierarchy" => "E"];
                case 3:
                    return ["id" => 83, "hierarchy" => "S"];
                case 4:
                    return ["id" => 83, "hierarchy" => "S"];
                case 5:
                    return ["id" => 87, "hierarchy" => "W"];
                case 6:
                    return ["id" => 76, "hierarchy" => "L"];
                case 7:
                    return ["id" => 81, "hierarchy" => "Q"];
                case 8:
                    return ["id" => 66, "hierarchy" => "B"];
                case 9:
                    return ["id" => 74, "hierarchy" => "J"];
                case 0:
                    return ["id" => 76, "hierarchy" => "L"];
            }
        } else {
            if (ord($name) >= 65 and ord($name) <= 90) { //大写英文开头
                return ["id" => ord($name), "hierarchy" => substr($name, 0, 1)];
            } else {
                if (ord($name) >= 97 and ord($name) <= 122) { //小写英文开头
                    return ["id" => ord($name) - 32, "hierarchy" => strtoupper(substr($name, 0, 1))];
                } else {
                    return ["id" => 100, "hierarchy" => "#"];
                }
            }
        }
    }
}
foreach ($result as $val) {
	  $hierarchy = self::getFirstChar($val["UserName"]);
	
	   $data[$hierarchy["id"]]["Hierarchy"] = trim($hierarchy["hierarchy"]);
	   $data[$hierarchy["id"]]["List"][] = [
		       "Id" => intval($val["Id"]),
		       "Name" => trim($val["UserName"]),
		       "Avatar" => trim($val["Avatar"])
	   ];
}

ksort($data);

这就是最后显示的效果

原创文章 5 获赞 4 访问量 319

猜你喜欢

转载自blog.csdn.net/weixin_46513874/article/details/105384094
今日推荐