Dog Feet Developer/PHP

[PHP] 초성 추출, 첫글자 초성추출 함수, 사용예시

티엔느 2021. 7. 7. 16:39
반응형

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
  ----------
*/
반응형