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()을 쓰세요.