count($arr) renvoie le nombre d'éléments d'un tableau : count(['red', 'green', 'blue']) vaut 3. Les tableaux PHP n'ont pas de propriété length, c'est donc avec count() que vous obtenez la longueur ou la taille d'un tableau.
count() est rapide : PHP stocke la taille dans le tableau, donc compter un million d'éléments coûte autant que d'en compter trois.
Compter un tableau multidimensionnel
Par défaut, count() ne compte que le premier niveau. Passez COUNT_RECURSIVE (ou 1) en second argument pour compter chaque élément à toutes les profondeurs. Les tableaux imbriqués eux-mêmes sont comptés aussi, c'est pourquoi le total dépasse souvent le nombre de valeurs finales.
Les deux raccourcis supposent exactement deux niveaux. Pour une imbrication plus profonde dans un tableau multidimensionnel, comptez les feuilles avec array_walk_recursive() : $n = 0; array_walk_recursive($arr, function () use (&$n) { $n++; });.
count ou sizeof
sizeof() est un alias de count() : mêmes arguments, même résultat. Utilisez count(). C'est ce qu'utilisent presque tout le code et toute la documentation PHP, et sizeof évoque une taille en octets pour qui connaît le C.
Compter les valeurs qui remplissent une condition
count() n'a pas d'argument de condition. Filtrez d'abord, puis comptez : array_filter() garde les éléments que votre callback accepte. Pour compter combien de fois chaque valeur apparaît, utilisez array_count_values().
Compter les caractères d'une chaîne
count() sert aux tableaux. Pour une chaîne, utilisez strlen() pour les octets ou mb_strlen() pour les caractères ; ils diffèrent dès que le texte contient des accents ou du japonais. La page strlen explique la différence. Pour compter des mots, découpez d'abord.
str_word_count() traite les lettres non ASCII comme des séparateurs, donc naïve compte pour deux mots. Découper sur les espaces est plus prévisible pour du vrai texte.
count() sur null ou une chaîne lève une erreur
Depuis PHP 8, count() n'accepte que les tableaux et les objets qui implémentent Countable. Tout le reste lève une TypeError, là où PHP 7.2 à 7.4 renvoyaient 0 (pour null) ou 1 (pour une chaîne ou un nombre) avec un warning. La cause habituelle est une variable qui vaut parfois null, comme une clé manquante ou une fonction qui n'a rien renvoyé.
Donnez un tableau vide comme valeur par défaut avec ??, et le compte vaut 0 :
Vérifier si un tableau est vide
Pour demander « ce tableau contient-il quelque chose », comparez avec un tableau vide ou utilisez empty(). count($arr) === 0 fonctionne aussi, mais seulement quand $arr est forcément un tableau.
empty($x) ne lève jamais d'erreur, même quand $x n'est pas définie ou vaut null, ce qui en fait la vérification la plus sûre pour une valeur qui n'est peut-être pas un tableau. Ses autres règles (une chaîne vide et "0" sont aussi vides) sont sur la page empty.
Questions fréquentes
Comment obtenir la taille d'un tableau en PHP ?
Utilisez count($arr). Elle renvoie le nombre d'éléments sous forme d'entier, donc count([10, 20, 30]) vaut 3. Les tableaux PHP n'ont pas de propriété length.
Quelle est la différence entre count et sizeof en PHP ?
Aucune. sizeof() est un alias de count() et prend les mêmes arguments. La plupart du code utilise count(), et sizeof() peut tromper les lecteurs qui connaissent le C, où il désigne des octets.
Comment compter les éléments d'un tableau multidimensionnel ?
count($arr) ne compte que le premier niveau. count($arr, COUNT_RECURSIVE) compte chaque élément à toutes les profondeurs, et les tableaux imbriqués comptent aussi comme éléments.
Pourquoi count() lève-t-elle une TypeError en PHP 8 ?
Depuis PHP 8.0, count() n'accepte que les tableaux et les objets qui implémentent Countable. count(null) lève TypeError: count(): Argument #1 ($value) must be of type Countable|array, null given, et count('abc') la même avec string given. Utilisez count($x ?? []) pour une valeur qui peut être null, et strlen() pour les chaînes.