count($arr) retorna o número de elementos de um array: count(['red', 'green', 'blue']) é 3. Arrays PHP não têm a propriedade length, então count() é como você obtém o tamanho de um array.
O count() é rápido: o PHP guarda o tamanho dentro do array, então contar um milhão de elementos custa o mesmo que contar três.
Contar um array multidimensional
Por padrão, count() conta só o nível superior. Passe COUNT_RECURSIVE (ou 1) como segundo argumento para contar todos os elementos em todas as profundidades. Os próprios arrays aninhados também são contados, e é por isso que o total costuma ser maior que o número de valores nas folhas.
Os dois atalhos supõem exatamente dois níveis. Para aninhamentos mais profundos num array multidimensional, conte as folhas com array_walk_recursive(): $n = 0; array_walk_recursive($arr, function () use (&$n) { $n++; });.
count ou sizeof
sizeof() é um alias de count(): mesmos argumentos, mesmo resultado. Use count(). É o que quase todo código e documentação PHP usa, e sizeof sugere um tamanho em bytes para quem conhece C.
Contar valores que atendem a uma condição
count() não tem argumento de condição. Filtre primeiro e depois conte: array_filter() mantém os elementos que o seu callback aceita. Para contar quantas vezes cada valor aparece, use array_count_values().
Contar caracteres numa string
count() é para arrays. Para uma string, use strlen() para bytes ou mb_strlen() para caracteres; eles diferem assim que o texto tem acentos ou japonês. A página sobre strlen explica a diferença. Para contar palavras, divida a string antes.
str_word_count() trata letras fora do ASCII como separadores, então naïve conta como duas palavras. Dividir pelos espaços é mais previsível para texto real.
count() em null ou numa string lança erro
Desde o PHP 8, count() só aceita arrays e objetos que implementam Countable. Qualquer outra coisa lança um TypeError, enquanto do PHP 7.2 ao 7.4 ele retornava 0 (para null) ou 1 (para uma string ou um número) com um aviso. A causa comum é uma variável que às vezes é null, como uma chave ausente ou uma função que não retornou nada.
Use um array vazio como padrão com ??, e a contagem fica 0:
Verificar se um array está vazio
Para perguntar "este array tem alguma coisa", compare com um array vazio ou use empty(). count($arr) === 0 também funciona, mas só quando $arr é com certeza um array.
empty($x) nunca lança erro, mesmo quando $x está indefinido ou é null, o que o torna a verificação mais segura para um valor que pode não ser um array. As outras regras dele (uma string vazia e "0" também são vazias) estão na página sobre empty.
Perguntas frequentes
Como obtenho o tamanho de um array no PHP?
Use count($arr). Ele retorna o número de elementos como inteiro, então count([10, 20, 30]) é 3. Arrays PHP não têm a propriedade length.
Qual a diferença entre count e sizeof no PHP?
Nenhuma. sizeof() é um alias de count() e recebe os mesmos argumentos. A maior parte do código usa count(), e sizeof() pode confundir quem conhece C, onde significa bytes.
Como conto os elementos de um array multidimensional?
count($arr) conta só o nível superior. count($arr, COUNT_RECURSIVE) conta todos os elementos em todas as profundidades, e os arrays aninhados também contam como elementos.
Por que count() lança um TypeError no PHP 8?
Desde o PHP 8.0, count() só aceita arrays e objetos que implementam Countable. count(null) lança TypeError: count(): Argument #1 ($value) must be of type Countable|array, null given, e count('abc') o mesmo com string given. Use count($x ?? []) para um valor que pode ser null, e strlen() para strings.