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.