PHP 를 이용 하여 한자 이니셜 을 가 져 오고 그룹 정렬 에 대한 자세 한 설명

머리말
본 고 는 주로 PHP 가 한자 의 이니셜 을 얻 고 그룹 별로 정렬 하 는 것 에 관 한 내용 을 소개 했다.왜냐하면 우리 가 프로젝트 를 할 때 이니셜 로 정렬 하 는 수요 가 있 기 때문이다.예 를 들 어 미 단의 도시 선택http://www.meituan.com/index/changecity/initiativeapp 에서 알파벳 으로 검색 하 는 것 이다.

본론
인터넷 에서 여러 가 지 를 찾 았 는데 뜻 대로 되 지 않 아서 스스로 하 나 를 써 서 모두 에 게 나 누 어 주 었 다.

<?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;
 }

}
프로젝트 에 직접 도입 하면 됩 니 다.네 임 스페이스 가 필요 하 다 면 스스로 추가 할 수 있 습 니 다.다음은 어떻게 사용 하 는 지 보 겠 습 니 다.

//       
$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 을 하 든 웹 페이지 를 하 든 모두 사용 할 수 있 습 니 다.

$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'
  )
 )
);
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

좋은 웹페이지 즐겨찾기