Menu

PHP 배열 길이 count(): 요소 개수 구하기

count($arr)는 PHP 배열의 요소 개수를 반환하므로 count(['a', 'b', 'c'])는 3입니다. COUNT_RECURSIVE로 중첩 배열 세기, sizeof()와 count()의 관계, 조건에 맞는 값 세기, PHP 8부터 count(null)이 TypeError를 던지는 이유를 알아봅니다.

이 페이지에는 실행 가능한 에디터가 있습니다 - 편집하고 실행하면 결과를 바로 볼 수 있습니다.

count($arr)는 배열의 요소 개수를 반환합니다: count(['red', 'green', 'blue'])는 3입니다. PHP 배열에는 length 속성이 없으므로 배열의 길이나 크기는 count()로 구합니다.

count()는 빠릅니다. PHP가 배열 안에 크기를 저장하므로 백만 개를 세든 세 개를 세든 비용이 같습니다.

다차원 배열 세기

기본적으로 count()는 최상위 단계만 셉니다. 두 번째 인수로 COUNT_RECURSIVE(또는 1)를 주면 모든 깊이의 모든 요소를 셉니다. 중첩 배열 자체도 세기 때문에 합계가 실제 말단 값의 개수보다 큰 경우가 많습니다.

두 지름길 모두 정확히 두 단계를 가정합니다. 다차원 배열의 중첩이 더 깊다면 array_walk_recursive()로 말단을 세세요: $n = 0; array_walk_recursive($arr, function () use (&$n) { $n++; });.

count와 sizeof

sizeof()는 count()의 별칭입니다. 인수도 결과도 같습니다. count()를 쓰세요. 거의 모든 PHP 코드와 문서가 이것을 쓰며, sizeof는 C를 아는 사람에게 바이트 크기를 떠올리게 합니다.

조건에 맞는 값 세기

count()에는 조건 인수가 없습니다. 먼저 걸러 낸 다음 세세요. array_filter()는 콜백이 받아들인 요소만 남깁니다. 각 값이 몇 번 나오는지 세려면 array_count_values()를 쓰세요.

문자열의 글자 수 세기

count()는 배열용입니다. 문자열에는 바이트 수는 strlen(), 문자 수는 mb_strlen()을 쓰세요. 텍스트에 악센트나 한글이 들어가는 순간 둘이 달라집니다. 그 차이는 strlen 페이지에서 다룹니다. 단어를 세려면 먼저 나누세요.

str_word_count()는 ASCII가 아닌 글자를 구분자로 취급하므로 naïve를 두 단어로 셉니다. 실제 텍스트에는 공백으로 나누는 편이 더 예측 가능합니다.

null이나 문자열에 count()를 쓰면 에러

PHP 8부터 count()는 배열과 Countable을 구현한 객체만 받습니다. 그 외에는 TypeError를 던지며, PHP 7.2부터 7.4까지는 경고와 함께 0(null의 경우)이나 1(문자열이나 숫자의 경우)을 반환했습니다. 흔한 원인은 없는 키나 아무것도 반환하지 않은 함수처럼 가끔 null이 되는 변수입니다.

??로 기본값을 빈 배열로 두면 개수는 0입니다.

배열이 비어 있는지 확인하기

"이 배열에 무언가 들어 있는가"를 확인하려면 빈 배열과 비교하거나 empty()를 쓰세요. count($arr) === 0도 동작하지만 $arr가 확실히 배열일 때만입니다.

empty($x)는 $x가 정의되지 않았거나 null이어도 에러를 던지지 않으므로, 배열이 아닐 수도 있는 값에는 더 안전한 확인입니다. 다른 규칙(빈 문자열과 "0"도 비어 있음)은 empty 페이지에 있습니다.

자주 묻는 질문

PHP에서 배열의 길이를 구하려면 어떻게 하나요?

count($arr)를 쓰세요. 요소 개수를 정수로 반환하므로 count([10, 20, 30])은 3입니다. PHP 배열에는 length 속성이 없습니다.

PHP에서 count와 sizeof의 차이는 무엇인가요?

없습니다. sizeof()는 count()의 별칭이며 같은 인수를 받습니다. 대부분의 코드는 count()를 쓰며, sizeof()는 바이트 크기를 뜻하는 C를 아는 사람에게 오해를 줄 수 있습니다.

다차원 배열의 요소를 세려면 어떻게 하나요?

count($arr)는 최상위 단계만 셉니다. count($arr, COUNT_RECURSIVE)는 모든 깊이의 모든 요소를 세며, 중첩 배열 자체도 요소로 셉니다.

PHP 8에서 count()가 TypeError를 던지는 이유는 무엇인가요?

PHP 8.0부터 count()는 배열과 Countable을 구현한 객체만 받습니다. count(null)은 TypeError: count(): Argument #1 ($value) must be of type Countable|array, null given을 던지고, count('abc')는 string given으로 같은 에러를 던집니다. null일 수 있는 값에는 count($x ?? [])를, 문자열에는 strlen()을 쓰세요.

Coddy 프로그래밍 언어 일러스트

Coddy로 코딩 배우기

시작하기