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'
)
)
);
총결산이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Laravel - 변환된 유효성 검사 규칙으로 API 요청 제공동적 콘텐츠를 위해 API를 통해 Laravel CMS에 연결하는 모바일 앱(또는 웹사이트) 구축을 고려하십시오. 이제 앱은 CMS에서 번역된 콘텐츠를 받을 것으로 예상되는 다국어 앱이 될 수 있습니다. 일반적으로 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.