Use PHP to obtain the first letter of a Chinese character and sort the characters in groups.

Source: Internet
Author: User
Tags array sort

Use PHP to obtain the first letter of a Chinese character and sort the characters in groups.

Preface

This article describes how to obtain and sort the initials of Chinese characters by group in PHP. Because we often need to sort the initials during project creation, for example: meituan city selection http://www.meituan.com/index/changecity/initiative app by letter search

Question

I found a variety of questions on the Internet, so I wrote one myself and shared it with you.

<? Php/*** @ author Tech */class Character {/*** two-dimensional array sort by first letter * @ param array $ data two-dimensional array * @ param string $ key of the first letter of targetKey name * @ return array the two-dimensional array associated with the first letter */public function groupByInitials (array $ data, $ targetKey = 'name') {$ data = array_map (function ($ item) use ($ targetKey) {return array_merge ($ item, ['initial' => $ this-> getInitials ($ item [$ targetKey]),]) ;}, $ data); $ data = $ this-> sortInitials ($ d Ata); return $ data;}/*** sort by letter * @ param array $ data * @ return array */public function sortInitials (array $ data) {$ sortData = []; foreach ($ data as $ key => $ value) {$ sortData [$ value ['initial'] [] = $ value ;} ksort ($ sortData); return $ sortData;}/*** get the first letter * @ param string $ str Chinese character string * @ return string first letter */public function getInitials ($ str) {if (empty ($ str) {return '';} $ fchar = ord ($ str {0 }); If ($ fchar> = ord ('A') & $ fchar <= ord ('Z') {return strtoupper ($ str {0 });} $ s1 = iconv ('utf-8', 'gb2312', $ str); $ s2 = iconv ('gb2312 ', 'utf-8', $ s1 ); $ s = $ s2 = $ str? $ S1: $ str; $ asc = ord ($ s {0}) * 256 + ord ($ s {1})-65536; if ($ asc >=- 20319 & $ asc <=-20284) {return 'a ';} if ($ asc >=- 20283 & $ asc <=-19776) {return 'B ';} if ($ asc >=- 19775 & $ asc <=-19219) {return 'C ';} if ($ asc >=- 19218 & $ asc <=-18711) {return 'D ';} if ($ asc >=- 18710 & $ asc <=-18527) {return 'E ';} if ($ asc >=- 18526 & $ asc <=-18240) {return 'F ';} if ($ asc >=- 18239 & $ asc <=-17923) {return 'G ';} if ($ asc >=- 17922 & $ asc <=-17418) {return 'H ';} if ($ asc >=- 17417 & $ asc <=-16475) {return 'J ';} if ($ asc >=- 16474 & $ asc <=-16213) {return 'K';} if ($ asc >=- 16212 & $ asc <=-15641) {return 'l';} if ($ asc >=- 15640 & $ asc <=- 15166) {return 'M ';} if ($ asc >=- 15165 & $ asc <=-14923) {return 'n ';} if ($ asc >=- 14922 & $ asc <=-14915) {return 'O ';} if ($ asc >=- 14914 & $ asc <=-14631) {return 'P ';} if ($ asc >=- 14630 & $ asc <=-14150) {return 'q ';} if ($ asc >=- 14149 & $ asc <=-14091) {return 'R ';} if ($ asc >=- 14090 & $ asc <=-13319) {return's ';} if ($ asc >=- 13318 & $ asc <=-12839) {return 'T ';} if ($ asc >=- 12838 & $ asc <=-12557) {return 'W ';} if ($ asc >=- 12556 & $ asc <=-11848) {return 'X ';} if ($ asc >=- 11847 & $ asc <=-11056) {return 'y ';} if ($ asc >=- 11055 & $ asc <=-10247) {return 'Z';} return null ;}}

You can directly introduce it to the project. If you need a namespace, you can add it yourself. The following shows how to use it.

// Sort by the first letter $ data = [['id' => 1, 'area _ name' => 'shandong '], ['id' => 2, 'area _ name' => 'jiangsu '], ['id' => 3, 'area _ name' => 'anhui'], ['id' => 4, 'area _ name' => 'fujian '], ['id' => 5, 'area _ name' => 'jiangxi'], ['id' => 6, 'area _ name' => 'guangdong '], ['id' => 7, 'area _ name' => 'guangxi'], ['id' => 8, 'area _ name' => 'hainan '], ['id' => 9, 'area _ name' => 'henan'], ['id' => 10, 'area _ name' => 'hunan '], ['id' => 11, 'area _ name' => 'hubei'],]; // initialization, then call the grouping method $ data = (new Character)-> groupByInitials ($ data, 'area _ name ');

Do you want the following results? You can use either an app or a webpage.

$ Data = array ('A' => array (0 => array ('id' => 3, 'area _ name' => 'anhui ', 'initial' => 'A'), 'F' => array (0 => array ('id' => 4, 'area _ name' => 'fujian ', 'initial' => 'F ')), 'G' => array (0 => array ('id' => 6, 'area _ name' => 'guangdong ', 'initial' => 'G '), 1 => array ('id' => 7, 'area _ name' => 'guangxi ', 'initial' => 'G ')), 'H' => array (0 => array ('id' => 8, 'area _ name' => 'hainan ', 'initial' => 'H '), 1 => array ('id' => 9, 'area _ name' => 'henan ', 'initial' => 'H '), 2 => array ('id' => 10, 'area _ name' => 'hunan ', 'initial' => 'H '), 3 => array ('id' => 11, 'area _ name' => 'hubei ', 'initial' => 'H ')), 'J' => array (0 => array ('id' => 2, 'area _ name' => 'jiangsu ', 'initial' => 'J '), 1 => array ('id' => 5, 'area _ name' => 'jiangxi ', 'initial' => 'J ')), 'S '=> array (0 => array ('id' => 1, 'area _ name' => 'shandong ', 'initial' =>'s ')));

Summary

The above is all the content of this article. I hope the content of this article has some reference and learning value for everyone's learning or work. If you have any questions, please leave a message to us, thank you for your support.

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.