<address id="rf17h"><dfn id="rf17h"></dfn></address>
    <address id="rf17h"><var id="rf17h"></var></address> <sub id="rf17h"><var id="rf17h"><ins id="rf17h"></ins></var></sub><address id="rf17h"></address>

    <address id="rf17h"><listing id="rf17h"><ins id="rf17h"></ins></listing></address>

    <sub id="rf17h"><var id="rf17h"></var></sub>
    <sub id="rf17h"><var id="rf17h"><output id="rf17h"></output></var></sub>

      <address id="rf17h"></address>
      <sub id="rf17h"><var id="rf17h"></var></sub>
          <sub id="rf17h"><dfn id="rf17h"><ins id="rf17h"></ins></dfn></sub>

          利用PHP获取汉字首字母并且分组排序详解

          <?php
           
          /**
            * @author Tech
            */
          class Character
          {
            /**
             * 二维数组根据首字母分组排序
             * @param array $data  二维数组
             * @param string $targetKey 首字母的键名
             * @return array    根据首字母关联的二维数组
             */
            public function groupByInitials( array $data , $targetKey = ‘name‘ )
            {
             $data = array_map ( function ( $item ) use ( $targetKey ) {
              return array_merge ( $item , [
               ‘initials‘ => $this ->getInitials( $item [ $targetKey ]),
              ]);
             }, $data );
             $data = $this ->sortInitials( $data );
             return $data ;
            }
           
            /**
             * 按字母排序
             * @param array $data
             * @return array
             */
            public function sortInitials( array $data )
            {
             $sortData = [];
             foreach ( $data as $key => $value ) {
              $sortData [ $value [ ‘initials‘ ]][] = $value ;
             }
             ksort( $sortData );
             return $sortData ;
            }
            
            /**
             * 获取首字母
             * @param string $str 汉字字符串
             * @return string 首字母
             */
            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;
            }
           
          }

          项目中直接引入即可,如果需要命名空间,可以自行添加,下面是我们看看怎么用。

          ?
          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          15
          16
          // 按首字母排序
          $data = [
            [ ‘id‘ => 1, ‘area_name‘ => ‘山东‘ ],
            [ ‘id‘ => 2, ‘area_name‘ => ‘江苏‘ ],
            [ ‘id‘ => 3, ‘area_name‘ => ‘安徽‘ ],
            [ ‘id‘ => 4, ‘area_name‘ => ‘福建‘ ],
            [ ‘id‘ => 5, ‘area_name‘ => ‘江西‘ ],
            [ ‘id‘ => 6, ‘area_name‘ => ‘广东‘ ],
            [ ‘id‘ => 7, ‘area_name‘ => ‘广西‘ ],
            [ ‘id‘ => 8, ‘area_name‘ => ‘海南‘ ],
            [ ‘id‘ => 9, ‘area_name‘ => ‘河南‘ ],
            [ ‘id‘ => 10, ‘area_name‘ => ‘湖南‘ ],
            [ ‘id‘ => 11, ‘area_name‘ => ‘湖北‘ ],
          ];
          // 初始化,然后调用分组方法
          $data = ( new Character)->groupByInitials( $data , ‘area_name‘ );

          下面的结果是不是你想要的呢,不论是做app还是网页,都可以用

          ?
          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          15
          16
          17
          18
          19
          20
          21
          22
          23
          24
          25
          26
          27
          28
          29
          30
          31
          32
          33
          34
          35
          36
          37
          38
          39
          40
          41
          42
          43
          44
          45
          46
          47
          48
          49
          50
          51
          52
          53
          54
          55
          56
          57
          58
          59
          60
          61
          62
          63
          64
          65
          66
          67
          68
          69
          $data = array (
            ‘A‘ => array (
             0 => array (
              ‘id‘ => 3,
              ‘area_name‘ => ‘安徽‘ ,
              ‘initials‘ => ‘A‘
             )
            ) ,
            ‘F‘ => array (
             0 => array (
              ‘id‘ => 4,
              ‘area_name‘ => ‘福建‘ ,
              ‘initials‘ => ‘F‘
             )
            ) ,
            ‘G‘ => array (
             0 => array (
              ‘id‘ => 6,
              ‘area_name‘ => ‘广东‘ ,
              ‘initials‘ => ‘G‘
             ) ,
             1 => array (
              ‘id‘ => 7,
              ‘area_name‘ => ‘广西‘ ,
              ‘initials‘ => ‘G‘
             )
            ) ,
            ‘H‘ => array (
             0 => array (
              ‘id‘ => 8,
              ‘area_name‘ => ‘海南‘ ,
              ‘initials‘ => ‘H‘
             ) ,
             1 => array (
              ‘id‘ => 9,
              ‘area_name‘ => ‘河南‘ ,
              ‘initials‘ => ‘H‘
             ) ,
             2 => array (
              ‘id‘ => 10,
              ‘area_name‘ => ‘湖南‘ ,
              ‘initials‘ => ‘H‘
             ) ,
             3 => array (
              ‘id‘ => 11,
              ‘area_name‘ => ‘湖北‘ ,
              ‘initials‘ => ‘H‘
             )
            ) ,
            ‘J‘ => array (
             0 => array (
              ‘id‘ => 2,
              ‘area_name‘ => ‘江苏‘ ,
              ‘initials‘ => ‘J‘
             ) ,
             1 => array (
              ‘id‘ => 5,
              ‘area_name‘ => ‘江西‘ ,
              ‘initials‘ => ‘J‘
             )
            ) ,
            ‘S‘ => array (
             0 => array (
              ‘id‘ => 1,
              ‘area_name‘ => ‘山东‘ ,
              ‘initials‘ => ‘S‘
             )
            )
          );
          相关文章
          相关标签/搜索
          王中王中特免费公开资料选料 永安市| 正蓝旗| 固原市| 湘乡市| 波密县| 临洮县| 运城市| 石渠县| 县级市| 扬中市| 新巴尔虎右旗| 德兴市| 翁牛特旗| 台南县| 磐石市| 那曲县| 黑山县| 民县| 确山县| 合川市| 盐亭县| 安康市| 舟曲县| 金沙县| 云浮市| 临颍县| 静乐县| 黎平县| 永康市| 乌兰浩特市| 稷山县| 平舆县| 门头沟区| 舞阳县| 综艺| 崇文区| 和顺县| http://fa.hz0j1r1vo.fun http://fa.hz0j0r6vo.fun http://fa.hz0j1r4vo.fun http://fa.hz0j2r5vo.fun http://fa.hz0j0r1vo.fun