반응형
php 초성 추출 / 첫글자만 초성 / 추출배열 사용 예시
function utf8_ls($cc) {
// get_cho(), get_cho_first() 에서 씀
$len = strlen($cc);
if($len <= 0) return false;
$hh = ord($cc[0]);
if ($hh <= 0x7F) return $hh;
if ($hh < 0xC2) return false;
if ($hh <= 0xDF && $len>1) return ($hh & 0x1F) << 6 | (ord($cc[1]) & 0x3F);
if ($hh <= 0xEF && $len>2) return ($hh & 0x0F) << 12 | (ord($cc[1]) & 0x3F) << 6 | (ord($cc[2]) & 0x3F);
if ($hh <= 0xF4 && $len>3) return ($hh & 0x0F) << 18 | (ord($cc[1]) & 0x3F) << 12 | (ord($cc[2]) & 0x3F) << 6 | (ord($cc[3]) & 0x3F);
return false;
}
//★모든글짜 초성만 뽑기
function get_cho($str, $accept=true) {
$choseong = array('ㄱ','ㄲ','ㄴ','ㄷ','ㄸ','ㄹ','ㅁ','ㅂ','ㅃ','ㅅ','ㅆ','ㅇ','ㅈ','ㅉ','ㅊ','ㅋ','ㅌ','ㅍ','ㅎ');
$result = '';
for ($i=0; $i<mb_strlen($str, 'UTF-8'); $i++) {
$cc = mb_substr($str, $i, 1, 'UTF-8');
$code = utf8_ls($cc) - 44032;
if ($code > -1 && $code < 11172) {
$choseong_idx = $code / 588;
$result .= $choseong[$choseong_idx];
continue;
}else if( $accept || in_array($cc, $choseong) ) {
$result .= $cc;
continue;
}
}
return $result;
}
//★들어온 글자의 첫글자의 초성만 뽑기
function get_cho_first($str, $accept=true) {
$choseong = array('ㄱ','ㄲ','ㄴ','ㄷ','ㄸ','ㄹ','ㅁ','ㅂ','ㅃ','ㅅ','ㅆ','ㅇ','ㅈ','ㅉ','ㅊ','ㅋ','ㅌ','ㅍ','ㅎ');
$result = '';
$cc = mb_substr($str, 0, 1, 'UTF-8');
$code = utf8_ls($cc) - 44032;
if ($code > -1 && $code < 11172) {
$choseong_idx = $code / 588;
$result = $choseong[$choseong_idx];
}else if( $accept || in_array($cc, $choseong) ) {
$result = $cc;
}
return $result;
}
//초성분리함수끝
// ★함수사용 예시
get_cho('안1녕g'); //ㅇ1ㄴg
get_cho('안1녕' , false); //ㅇㄴ
get_cho_first('안1녕'); //ㅇ
get_cho_first('1녕'); //1
get_cho_first('1녕' , false); // 공백
// ★초성 구분 예시
//초성 구분시에 쓸 배열
$cho_group1 = array('ㄱ','ㄲ','ㄴ','ㄷ','ㄸ','ㄹ','ㅁ','ㅂ','ㅃ','ㅅ','ㅆ');
$cho_group2 = array('ㅇ','ㅈ','ㅉ','ㅊ','ㅋ','ㅌ','ㅍ','ㅎ');
$list= array('감나무','★★_★','하늘','보라','다람쥐','star','라면','옹기','타조','car','tree');
$cho_text_group1=$cho_text_group2=$cho_text_group3='';
for($i = 0 ; $i<count($list); $i++){
$cho_first = get_cho_first($list[$i]);
if( in_array($cho_first, $cho_group1)){
//ㄱ~ㅅ
$cho_text_group1 .= "<p>[". $cho_first."] - ".$list[$i]. "</p>";
}else if( in_array($cho_first, $cho_group2)){
//ㅇ~ㅎ
$cho_text_group2 .= "<p>[". $cho_first."] - ".$list[$i]. "</p>";
}else{
//한글외
$cho_text_group3 .= "<p>[". $cho_first."] - ".$list[$i]. "</p>";
}
}
echo "----------";
echo "<div>".$cho_text_group1."</div>";
echo "----------";
echo "<div>".$cho_text_group2."</div>";
echo "----------";
echo "<div>".$cho_text_group3."</div>";
echo "----------";
/*
----------
[ㄱ] - 감나무
[ㅂ] - 보라
[ㄷ] - 다람쥐
[ㄹ] - 라면
----------
[ㅎ] - 하늘
[ㅇ] - 옹기
[ㅌ] - 타조
----------
[★] - ★★_★
[s] - star
[c] - car
[t] - tree
----------
*/
반응형
'Dog Feet Developer > PHP' 카테고리의 다른 글
[PHP] 글자자르기 substr() (0) | 2022.12.27 |
---|---|
[PHP] HTML태그 & PHP코드 지우기 strip_tags() (0) | 2021.01.05 |
[PHP] 페이지 이동시키는 방법 3가지 (0) | 2020.07.09 |
[PHP] 자주 쓰는 쿼리 뽑기 함수 (0) | 2020.05.25 |
[PHP] 날짜관련 - date()/strtotime() (0) | 2020.05.15 |