PHP에서는 기본 문자열 함수 몇 가지를 조합하는 것만으로도 문자열 안에 각 문자가 몇 번 등장하는지 손쉽게 계산할 수 있습니다. 이 글에서는 공백을 제거하고 문자열을 배열로 분할한 뒤, 반복문으로 출현 횟수를 집계하는 방법을 단계별로 살펴봅니다.
예제 코드
<?php
$str = "welcome to tutorials point";
$str = str_replace(" ", "", $str); // 공백 제거
$arr = str_split($str); // 한 글자씩 배열로 분할
// 각 문자의 출현 횟수 집계
foreach ($arr as $val) {
if (!isset($output[$val])) {
$output[$val] = 1;
} else {
$output[$val] += 1;
}
}
// 결과 출력
foreach ($output as $char => $number) {
echo $char . " " . $number . "번\n";
}
?>
코드 설명
1. 공백 제거str_replace(" ", "", $str)는 문자열에 포함된 모든 공백을 빈 문자열로 치환하여, 집계 대상에서 공백을 제외합니다.
2. 문자열 분할str_split($str)은 문자열을 한 글자씩 잘라 배열 형태로 반환합니다. 예를 들어 "welcome"은 ["w", "e", "l", "c", "o", "m", "e"]가 됩니다.
3. 출현 횟수 집계
첫 번째 foreach 반복문에서는 문자를 키(key)로 사용하는 연관 배열 $output에 횟수를 누적합니다. isset()으로 해당 문자가 처음 등장했는지 확인하여 초기값 1을 설정하고, 이미 존재하는 문자라면 기존 값에 1을 더합니다.
4. 결과 출력
두 번째 foreach 반복문이 집계된 배열을 순회하면서 각 문자와 그 등장 횟수를 화면에 출력합니다.
실행 결과
w 1번 e 2번 l 2번 c 1번 o 4번 m 1번 t 4번 u 1번 r 1번 i 2번 a 1번 s 1번 p 1번 n 1번
결과를 보면 o와 t가 각각 4번으로 가장 많이 등장했으며, e, l, i는 2번씩 나타난 것을 확인할 수 있습니다.
더 간단한 방법: count_chars() 활용
PHP에서는 내장 함수 count_chars()를 사용하면 위 과정을 훨씬 간결하게 구현할 수 있습니다.
<?php
$str = str_replace(" ", "", "welcome to tutorials point");
foreach (count_chars($str, 1) as $ascii => $count) {
echo chr($ascii) . " " . $count . "번\n";
}
?>
count_chars($str, 1)은 실제로 사용된 문자만 아스키 코드를 키로 하여 출현 횟수를 배열로 반환하며, chr() 함수로 아스키 코드를 다시 문자로 변환해 출력할 수 있습니다. 두 방식 모두 동일한 결과를 제공하므로, 상황에 맞게 선택해 사용하면 됩니다.