Maison  >  Article  >  développement back-end  >  PHP implémente des classes et des méthodes pour trier les noms par première lettre

PHP implémente des classes et des méthodes pour trier les noms par première lettre

PHP中文网
PHP中文网original
2017-09-01 16:55:213432parcourir

thinkphp trie les noms par première lettre

<?php
public function getFirstChar($s){
$s0 = mb_substr($s,0,3); //获取名字的姓 
$s = iconv(&#39;UTF-8&#39;,&#39;gb2312&#39;, $s0); //将UTF-8转换成GB2312编码 
//dump($s0);
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"; 
}else if(ord($s)>=48 and ord($s)<=57){ //数字开头 
switch(iconv_substr($s,0,1,&#39;utf-8&#39;)){ 
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,&#39;utf-8&#39;); 
//中英混合的词语,不适合上面的各种情况,因此直接提取首个字符即可 
} 
} 
public function addPeople()
{
$userName = array(&#39;张三&#39;,&#39;马大帅&#39;,&#39;李四&#39;,&#39;王五&#39;,&#39;小二&#39;,&#39;猫蛋&#39;,&#39;狗蛋&#39;,&#39;王花&#39;,&#39;三毛&#39;,&#39;小明&#39;,&#39;李刚&#39;,&#39;张飞&#39;); 
sort($userName); 
foreach($userName as $name){ 
$char = $this->getFirstChar($name); 
$nameArray = array(); 
if(count($charArray[$char])!=0){ 
$nameArray = $charArray[$char]; 
} 
array_push($nameArray,$name); 
$charArray[$char] = $nameArray;
} 
ksort($charArray);
$this->assign(&#39;_list&#39;,$charArray);
}
?>

Affichage de la page

<foreach name="_list" item="vo" key="k">
<p>{$k}</p>
<foreach name="vo" item="l">
<span class="name">{$l}</span>
</foreach>
</foreach>

Rendu : PHP implémente des classes et des méthodes pour trier les noms par première lettre

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn