1. 程式人生 > >php按照中文首字母排序

php按照中文首字母排序

substr 工具類 rar echo from 獲取 utf turn strong

1> 網絡上很多php的工具類可以將漢字轉為拼音;

2> 將拼音進行排序即可

另一種則是類似mysql轉碼方式:

1     foreach ($array as $key=>$value)  
2     {  
3         $new_array[$key] = iconv(‘UTF-8‘, ‘GBK‘, $value);  
4     }  1     foreach ($array as $key=>$value)  
2     {  
3         $new_array[$key] = iconv(‘UTF-8‘, ‘GBK‘, $value
); 4 } 5 asort($new_array); 6 foreach ($new_array as $key=>$value) 7 { 8 $array[$key] = iconv(‘GBK‘, ‘UTF-8‘, $value); 9 } 5 asort($new_array); 6 foreach ($new_array as $key=>$value) 7 { 8 $array[$key] = iconv(‘GBK‘, ‘UTF-8‘, $value
); 9 }

綜合案列

//按中文首字母排序
function orderByName($userName,$order=‘asc‘,$key=‘jlname‘){  
   foreach($userName as $name){
        if(is_array($name))$char = getFirstChar($name[$key]);
        elseif(is_string($name))$char= getFirstChar($name);
        $nameArray = array();//將姓名按照姓的首字母與相對的首字母鍵進行配對  
        if
(count($charArray[$char])!=0)$nameArray = $charArray[$char]; array_push($nameArray,$name); $charArray[$char] = $nameArray; } if(strtolower($order)==‘asc‘)ksort($charArray);elseif(strtolower($order)==‘desc‘)krsort($charArray); $newarr = array(); $i=0; foreach($charArray as $ck=>$cv){ if(is_array($cv)){ foreach($cv as $cck=>$ccv){ $newarr[$i++] = $ccv; } }else{ $newarr[$i++]=$cv; } } /*echo ‘按首字母排序前:<br>‘; print_r($charArray); //根據鍵值對排序 echo ‘按首字母排序後:<br>‘; print_r($charArray);*/ return $newarr; } //獲取中文的首字母 function getFirstChar($s){ $s0 = mb_substr($s,0,1,‘utf-8‘);//獲取名字的姓 $s = iconv(‘UTF-8‘,‘GBK‘, $s0);//將UTF-8轉換成GB2312編碼 if(ord($s0)>128){//漢字開頭,漢字沒有以U、V開頭的 $asc=ord($s{0})*256+ord($s{1})-65536; if($asc>=-20319 and $asc<=-20284)return "A"; if($asc>=-20283 and $asc<=-19776)return "B"; if($asc>=-19775 and $asc<=-19219)return "C"; if($asc>=-19218 and $asc<=-18711)return "D"; if($asc>=-18710 and $asc<=-18527)return "E"; if($asc>=-18526 and $asc<=-18240)return "F"; if($asc>=-18239 and $asc<=-17760)return "G"; if($asc>=-17759 and $asc<=-17248)return "H"; if($asc>=-17247 and $asc<=-17418)return "I"; if($asc>=-17417 and $asc<=-16475)return "J"; if($asc>=-16474 and $asc<=-16213)return "K"; if($asc>=-16212 and $asc<=-15641)return "L"; if($asc>=-15640 and $asc<=-15166)return "M"; if($asc>=-15165 and $asc<=-14923)return "N"; if($asc>=-14922 and $asc<=-14915)return "O"; if($asc>=-14914 and $asc<=-14631)return "P"; if($asc>=-14630 and $asc<=-14150)return "Q"; if($asc>=-14149 and $asc<=-14091)return "R"; if($asc>=-14090 and $asc<=-13319)return "S"; if($asc>=-13318 and $asc<=-12839)return "T"; if($asc>=-12838 and $asc<=-12557)return "W"; if($asc>=-12556 and $asc<=-11848)return "X"; if($asc>=-11847 and $asc<=-11056)return "Y"; if($asc>=-11055 and $asc<=-10247)return "Z"; }elseif(ord($s)>=48 and ord($s)<=57){//數字開頭 switch(iconv_substr($s,0,1,‘utf-8‘)){ case 1:return "Y"; case 2:return "E"; case 3:return "S"; case 4:return "S"; case 5:return "W"; case 6:return "L"; case 7:return "Q"; case 8:return "B"; case 9:return "J"; case 0:return "L"; } }else if(ord($s)>=65 and ord($s)<=90){//大寫英文開頭 return substr($s,0,1); }else if(ord($s)>=97 and ord($s)<=122){//小寫英文開頭 return strtoupper(substr($s,0,1)); }else{ return iconv_substr($s0,0,1,‘utf-8‘);//中英混合的詞語提取首個字符即可 } }

mysql實現

如果當前數據庫編碼是utf-8,則進行轉碼,轉為gbk,gbk默認漢字按照拼音排序存放:

1 SELECT * FROM USER ORDER BY convert(uname using gbk) ASC

如果當前編碼為gbk則:

1 SELECT * FROM USER ORDER BY uname ASC

php按照中文首字母排序