场景:对中文字符串进行排序
<?php class demo { public function __construct() { } /** * @todo 获取中文字符串的字符首字母ascii * @param $string * @param int $default_length * @return float|int */ public function chinese_alphabet_ascii($string, $default_length = 3) { $number = 0; for ($i = 0; $i < $default_length; $i++) { $number = $number * 100 + $this->chinese_initials(mb_substr($string, $i, $i + 1)); } for ($j = mb_strlen($string); $j < $default_length; $j++) { $number *= 100; } return $number; } /** * @todo 获取汉字拼音首字母 - ASCII * @param $character * @return int */ private static function chinese_initials($character) { $ascii = ord($character); if ($ascii > 122) { $unicode = iconv("UTF-8", "GBK", $character); $ascii = ord($unicode{0}) * 256 + ord($unicode{1}) - 65536; } switch ($ascii) { // 0 ~ 9 case $ascii >= 48 and $ascii <= 57 : $result_ascii = $ascii; break; // A ~ Z case $ascii >= 65 and $ascii <= 90 : $result_ascii = $ascii; break; // a ~ z case $ascii >= 97 and $ascii <= 122 : $result_ascii = $ascii - 32; break; // 汉字字母 case $ascii >= -20319 and $ascii <= -20284: $result_ascii = 65; break; case $ascii >= -20283 and $ascii <= -19776: $result_ascii = 66; break; case $ascii >= -19775 and $ascii <= -19219: $result_ascii = 67; break; case $ascii >= -19218 and $ascii <= -18711: $result_ascii = 68; break; case $ascii >= -18710 and $ascii <= -18527: $result_ascii = 69; break; case $ascii >= -18526 and $ascii <= -18240: $result_ascii = 70; break; case $ascii >= -18239 and $ascii <= -17923: $result_ascii = 71; break; case $ascii >= -17922 and $ascii <= -17418: $result_ascii = 72; break; case $ascii >= -17417 and $ascii <= -16475: $result_ascii = 74; break; case $ascii >= -16474 and $ascii <= -16213: $result_ascii = 75; break; case $ascii >= -16212 and $ascii <= -15641: $result_ascii = 76; break; case $ascii >= -15640 and $ascii <= -15166: $result_ascii = 77; break; case $ascii >= -15165 and $ascii <= -14923: $result_ascii = 78; break; case $ascii >= -14922 and $ascii <= -14915: $result_ascii = 79; break; case $ascii >= -14914 and $ascii <= -14631: $result_ascii = 80; break; case $ascii >= -14630 and $ascii <= -14150: $result_ascii = 81; break; case $ascii >= -14149 and $ascii <= -14091: $result_ascii = 82; break; case $ascii >= -14090 and $ascii <= -13319: $result_ascii = 83; break; case $ascii >= -13318 and $ascii <= -12839: $result_ascii = 84; break; case $ascii >= -12838 and $ascii <= -12557: $result_ascii = 87; break; case $ascii >= -12556 and $ascii <= -11848: $result_ascii = 88; break; case $ascii >= -11847 and $ascii <= -11056: $result_ascii = 89; break; case $ascii >= -11055 and $ascii <= -10247: $result_ascii = 90; break; default: $result_ascii = 91; } return $result_ascii; } }
原文:https://www.cnblogs.com/wsybky/p/12181523.html