PHP로 개발을 하다 보면 배열에 같은 값이 여러 번 중복되어 있을 때, 각 값이 몇 번 등장하는지 개수를 세어야 하는 경우가 자주 발생합니다. 이번 글에서는 PHP의 내장 함수를 활용해 배열 내 값들의 빈도를 손쉽게 계산하고, foreach 루프를 통해 중복 없이 한 번씩만 출력하는 방법을 알아보겠습니다.
예제 배열 준비
먼저 다음과 같이 이름들이 담긴 PHP 배열이 있다고 가정해 보겠습니다.
$listOfNames = array('John', 'David', 'Mike', 'David', 'Mike', 'David');위 배열에는 'John'은 1번, 'David'는 3번, 'Mike'는 2번 등장합니다. 우리가 원하는 최종 출력 결과는 다음과 같습니다.
Array ( [John] => 1 [David] => 3 [Mike] => 2 )
array_count_values() 함수 사용하기
배열 내 각 값의 등장 횟수를 계산하려면 PHP에서 기본 제공하는 array_count_values() 함수를 사용하면 됩니다. 이 함수는 배열을 인자로 받아, 원래 배열의 고유한 값들을 키(key)로 하고 해당 값의 빈도수를 값(value)으로 하는 새로운 연관 배열을 반환합니다.
전체 예제 코드
다음은 실제 동작하는 PHP 코드입니다.
<!DOCTYPE html>
<html>
<body>
<?php
$listOfNames = array('John', 'David', 'Mike', 'David', 'Mike', 'David');
$frequencyOfEachName = array_count_values($listOfNames);
print_r($frequencyOfEachName);
?>
</body>
</html>실행 결과
위 코드를 실행하면 다음과 같은 출력 결과를 확인할 수 있습니다.
Array ( [John] => 1 [David] => 3 [Mike] => 2 )
foreach 루프로 결과 출력하기
print_r() 대신 foreach 루프를 사용하면 각 이름과 그 개수를 더 깔끔하게 화면에 표시할 수 있습니다. array_count_values()가 이미 중복을 제거한 형태의 배열을 반환하기 때문에, foreach 루프 안에서 각 값은 자연스럽게 한 번씩만 출력됩니다.
<?php
$listOfNames = array('John', 'David', 'Mike', 'David', 'Mike', 'David');
$frequencyOfEachName = array_count_values($listOfNames);
foreach ($frequencyOfEachName as $name => $count) {
echo $name . ': ' . $count . '<br>';
}
?>실행 결과는 다음과 같습니다.
John: 1 David: 3 Mike: 2
정리
PHP에서 배열 내 값의 개수를 세고 중복 없이 출력하는 작업은 array_count_values() 함수 하나면 충분합니다. 별도의 반복문으로 직접 카운트 로직을 구현할 필요 없이, 함수가 반환하는 연관 배열을 foreach 루프로 순회하기만 하면 됩니다. 이 방법은 코드가 간결할 뿐만 아니라 실행 성능 면에서도 효율적이므로, 통계 집계나 데이터 분석 관련 작업에서 적극적으로 활용해 보시기 바랍니다.