한글 받침 '은'하고 '는'구별하는 함수

몇개 안되는 레코드의 데이터라면 '은'하고 '는'을 코드의 힘이 필요없이 쉽게 붙일수 있지만 레코드가 수백만개인데 특정 레코드의 데이터값에 받침을 붙이는 상황이라면 얘기가 틀려집니다.
아래는 한글과 한글이 아닌것의 종성을 구별해  '은'하고 '는'을 붙이는 함수입니다.
  

<?php
/**
 * 한국어 명사에 적절한 조사 '은/는'을 붙여 반환하는 함수
 *
 * @param string $word 받침을 확인할 단어 (주로 명사)
 * @return string 조사가 붙은 단어 (예: '사과' -> '사과는', '책' -> '책은')
 */
function attach_eun_neun(string $word): string
{
    // 1. 단어의 마지막 글자(종성 확인 대상)를 추출합니다.
    $last_char = mb_substr($word, -1, 1, 'UTF-8');

    // 2. 한글 유니코드 범위 44032 (가) ~ 55203 (힣)에 속하는지 확인합니다.
    // 한글이 아니면 받침 계산을 할 수 없으므로 '는'을 붙여 반환합니다.
    $char_code = mb_ord($last_char, 'UTF-8');
    if ($char_code < 0xAC00 || $char_code > 0xD7A3) { // 0xAC00 = 가, 0xD7A3 = 힣
        return $word . '는';
    }

    // 3. 종성(받침) 유무를 판단하는 핵심 로직
    // 한글의 유니코드 값 (Char Code)에서 '가'의 코드값 (0xAC00)을 뺀 후,
    // (초성 개수 * 중성 개수)인 588로 나눈 나머지(나머지 = 중성과 종성이 합쳐진 값)를
    // 다시 종성 개수(28)로 나눕니다.
    // 나머지가 0이면 종성이 없음 (받침 없음).
    // 나머지가 0이 아니면 종성이 있음 (받침 있음).
    
    // 종성 계산: (글자 코드 - '가' 코드) % 28
    $jongseong_index = ($char_code - 0xAC00) % 28;

    if ($jongseong_index === 0) {
        // 받침이 없는 경우: '는'을 붙입니다. (예: 사과, 바나나)
        return $word . '는';
    } else {
        // 받침이 있는 경우: '은'을 붙입니다. (예: 책, 하늘, 빛)
        return $word . '은';
    }
}

// --- 사용 예시 ---

echo "사과: " . attach_eun_neun('사과') . "\n"; // 출력: 사과: 사과는
echo "책: " . attach_eun_neun('책') . "\n";     // 출력: 책: 책은
echo "컴퓨터: " . attach_eun_neun('컴퓨터') . "\n"; // 출력: 컴퓨터: 컴퓨터는
echo "연필: " . attach_eun_neun('연필') . "\n";   // 출력: 연필: 연필은
echo "하늘: " . attach_eun_neun('하늘') . "\n";   // 출력: 하늘: 하늘은

// 한글이 아닌 경우 (예외 처리)
echo "Apple: " . attach_eun_neun('Apple') . "\n"; // 출력: Apple: Apple는
?>

"남성과 동등해지고자 하는 여성은 야망이 부족한 것이다. - 티모시 리어리 Women who seek to be equal with men lack ambition. - Timothy Leary"

- 여성, 야망 -

북마크목록