Maison  >  Article  >  développement back-end  >  Comment obtenir la première lettre initiale chinoise en PHP et la trier

Comment obtenir la première lettre initiale chinoise en PHP et la trier

墨辰丷
墨辰丷original
2018-05-22 15:51:291418parcourir

Cet article présente principalement la méthode d'obtention de la première lettre initiale chinoise en PHP et de son tri, impliquant la traversée de tableaux PHP, la conversion d'encodage et les compétences opérationnelles liées au tri de tableaux. Les amis dans le besoin peuvent s'y référer

Le. les détails sont les suivants :

Récemment, j'effectue un règlement en valeur stockée. Dans les exigences, la page d'accueil du règlement doit être triée par la première lettre du magasin A-Z. Ma structure de données était à l'origine comme ceci :

Array
(
  [0] => Array
    (
      [sid] => 2885842
      [recetcstoredpay] => 24000
      [recetclprinciple] => 23465
      [paytcstoredpay] => 5455
      [paytclprinciple] => 34900
      [sname] => 百宴餐饮---便宜坊烤鸭店
    )
  [1] => Array
    (
      [sid] => 3644191
      [recetcstoredpay] => 89200
      [recetclprinciple] => 406930
      [paytcstoredpay] => 4090
      [paytclprinciple] => 97800
      [sname] => 大长秋餐饮中心
    )
  [2] => Array
    (
      [sid] => 5229673
      [recetcstoredpay] => 26000
      [recetclprinciple] => 45930
      [paytcstoredpay] => 24795
      [paytclprinciple] => 121800
      [sname] => 大众点评网
    )
  [3] => Array
    (
      [sid] => 3715927
      [recetcstoredpay] => 13600
      [recetclprinciple] => 56930
      [paytcstoredpay] => 5710
      [paytclprinciple] => 37800
      [sname] => 江东北路店
    )
  [4] => Array
    (
      [sid] => 3671092
      [recetcstoredpay] => 1280
      [recetclprinciple] => 46930
      [paytcstoredpay] => 128090
      [paytclprinciple] => 149800
      [sname] => 金凤区新馆
    )
  [5] => Array
    (
      [sid] => 1858783
      [recetcstoredpay] => 2040
      [recetclprinciple] => 4465
      [paytcstoredpay] => 245
      [paytclprinciple] => 4900
      [sname] => 浙江西子宾馆
    )
  [6] => Array
    (
      [sid] => 16832117
      [recetcstoredpay] => 81600
      [recetclprinciple] => 470930
      [paytcstoredpay] => 506090
      [paytclprinciple] => 8000
      [sname] => 欢乐谷店
    )
)

Selon les exigences, si vous souhaitez trier en fonction du premier caractère chinois de sname, alors vous avez besoin écrire Une façon d'obtenir la première lettre :

/**
* 取汉字的第一个字的首字母
* @param type $str
* @return string|null
*/
public function _getFirstCharter($str){
if(emptyempty($str)){return '';}
$fchar=ord($str{0});
if($fchar>=ord(&#39;A&#39;)&&$fchar<=ord(&#39;z&#39;)) return strtoupper($str{0});
$s1=iconv(&#39;UTF-8&#39;,&#39;gb2312&#39;,$str);
$s2=iconv(&#39;gb2312&#39;,&#39;UTF-8&#39;,$s1);
$s=$s2==$str?$s1:$str;
$asc=ord($s{0})*256+ord($s{1})-65536;
if($asc>=-20319&&$asc<=-20284) return &#39;A&#39;;
if($asc>=-20283&&$asc<=-19776) return &#39;B&#39;;
if($asc>=-19775&&$asc<=-19219) return &#39;C&#39;;
if($asc>=-19218&&$asc<=-18711) return &#39;D&#39;;
if($asc>=-18710&&$asc<=-18527) return &#39;E&#39;;
if($asc>=-18526&&$asc<=-18240) return &#39;F&#39;;
if($asc>=-18239&&$asc<=-17923) return &#39;G&#39;;
if($asc>=-17922&&$asc<=-17418) return &#39;H&#39;;
if($asc>=-17417&&$asc<=-16475) return &#39;J&#39;;
if($asc>=-16474&&$asc<=-16213) return &#39;K&#39;;
if($asc>=-16212&&$asc<=-15641) return &#39;L&#39;;
if($asc>=-15640&&$asc<=-15166) return &#39;M&#39;;
if($asc>=-15165&&$asc<=-14923) return &#39;N&#39;;
if($asc>=-14922&&$asc<=-14915) return &#39;O&#39;;
if($asc>=-14914&&$asc<=-14631) return &#39;P&#39;;
if($asc>=-14630&&$asc<=-14150) return &#39;Q&#39;;
if($asc>=-14149&&$asc<=-14091) return &#39;R&#39;;
if($asc>=-14090&&$asc<=-13319) return &#39;S&#39;;
if($asc>=-13318&&$asc<=-12839) return &#39;T&#39;;
if($asc>=-12838&&$asc<=-12557) return &#39;W&#39;;
if($asc>=-12556&&$asc<=-11848) return &#39;X&#39;;
if($asc>=-11847&&$asc<=-11056) return &#39;Y&#39;;
if($asc>=-11055&&$asc<=-10247) return &#39;Z&#39;;
return null;
}

Ensuite, l'étape suivante consiste à trier ces données bidimensionnelles. J'y ai réfléchi pendant longtemps, puis j'ai élaboré un plan. D'abord, appelez la méthode pour obtenir la première lettre dans la boucle, puis utilisez cette lettre comme clé. Parce qu'il existe une méthode de tri en fonction de la clé. clé en PHP, donc mon code s'écrit comme ceci :

//门店名称
$shopData = $this->_shopNamesArray;
//根据门店名称第一个汉字的首字母正序排序
$settles = $result[&#39;data&#39;];
$settlesRes = array();
foreach ($settles as $sett) {
    $sname = $shopData[$sett[&#39;sid&#39;]];
    $sett[&#39;sname&#39;] = $sname;
    $snameFirstChar = $this->_getFirstCharter($sname); //取出门店的第一个汉字的首字母
    $settlesRes[$snameFirstChar] = $sett;//以这个首字母作为key
}
ksort($settlesRes); //对数据进行ksort排序,以key的值升序排序

Imprimez d'abord ces données pour voir l'effet :

Array
(
  [B] => Array
    (
      [sid] => 2885842
      [recetcstoredpay] => 24000
      [recetclprinciple] => 23465
      [paytcstoredpay] => 5455
      [paytclprinciple] => 34900
      [sname] => 百宴餐饮---便宜坊烤鸭店
    )
  [D] => Array
    (
      [sid] => 5229673
      [recetcstoredpay] => 26000
      [recetclprinciple] => 45930
      [paytcstoredpay] => 24795
      [paytclprinciple] => 121800
      [sname] => 大众点评网
    )
  [H] => Array
    (
      [sid] => 16832117
      [recetcstoredpay] => 81600
      [recetclprinciple] => 470930
      [paytcstoredpay] => 506090
      [paytclprinciple] => 8000
      [sname] => 欢乐谷店
    )
  [J] => Array
    (
      [sid] => 3671092
      [recetcstoredpay] => 1280
      [recetclprinciple] => 46930
      [paytcstoredpay] => 128090
      [paytclprinciple] => 149800
      [sname] => 金凤区新馆
    )
  [Z] => Array
    (
      [sid] => 1858783
      [recetcstoredpay] => 2040
      [recetclprinciple] => 4465
      [paytcstoredpay] => 245
      [paytclprinciple] => 4900
      [sname] => 浙江西子宾馆
    )
)

Recommandations associées :

Sélection orientée objet PHPTriExplication avec exemples

Utilisation de javascript pour implémenter la distribution normale des tableauxProblème de tri (avec code)

Implémentation PHP de la fusion de deux tri partage de code de liste chaînée

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
Article précédent:Comment obtenir l'heure en phpArticle suivant:Comment obtenir l'heure en php