count($arr) restituisce il numero di elementi di un array: count(['red', 'green', 'blue']) vale 3. Gli array PHP non hanno una proprietà length, quindi count() è il modo per ottenere la lunghezza o la dimensione di un array.
count() è veloce: PHP memorizza la dimensione dentro l'array, quindi contare un milione di elementi costa quanto contarne tre.
Contare un array multidimensionale
Di default count() conta solo il primo livello. Passa COUNT_RECURSIVE (o 1) come secondo argomento per contare ogni elemento a ogni profondità. Vengono contati anche gli array annidati stessi, ed è per questo che il totale è spesso maggiore del numero di valori finali.
Entrambe le scorciatoie presuppongono esattamente due livelli. Per un annidamento più profondo in un array multidimensionale, conta i valori finali con array_walk_recursive(): $n = 0; array_walk_recursive($arr, function () use (&$n) { $n++; });.
count vs sizeof
sizeof() è un alias di count(): stessi argomenti, stesso risultato. Usa count(). È quello che usano quasi tutto il codice e la documentazione PHP, e sizeof fa pensare a una dimensione in byte a chiunque conosca il C.
Contare i valori che soddisfano una condizione
count() non ha un argomento per la condizione. Prima filtra, poi conta: array_filter() tiene gli elementi che la tua callback accetta. Per contare quante volte compare ogni valore, usa array_count_values().
Contare i caratteri di una stringa
count() è per gli array. Per una stringa, usa strlen() per i byte o mb_strlen() per i caratteri; differiscono appena il testo contiene accenti o giapponese. La pagina su strlen spiega la differenza. Per contare le parole, prima dividi la stringa.
str_word_count() tratta le lettere non ASCII come separatori, quindi naïve conta come due parole. Dividere sugli spazi è più prevedibile per il testo reale.
count() su null o su una stringa lancia un errore
Da PHP 8, count() accetta solo array e oggetti che implementano Countable. Qualsiasi altra cosa lancia un TypeError, mentre PHP da 7.2 a 7.4 restituiva 0 (per null) o 1 (per una stringa o un numero) con un warning. La causa abituale è una variabile che a volte è null, come una chiave mancante o una funzione che non ha restituito nulla.
Imposta come default un array vuoto con ??, e il conteggio sarà 0:
Verificare se un array è vuoto
Per chiedere "questo array contiene qualcosa", confronta con un array vuoto oppure usa empty(). Funziona anche count($arr) === 0, ma solo quando $arr è certamente un array.
empty($x) non lancia mai errori, anche quando $x non è definita o è null, il che lo rende il controllo più sicuro per un valore che potrebbe non essere un array. Le sue altre regole (anche una stringa vuota e "0" sono vuoti) sono nella pagina su empty.
Domande frequenti
Come ottengo la lunghezza di un array in PHP?
Usa count($arr). Restituisce il numero di elementi come intero, quindi count([10, 20, 30]) vale 3. Gli array PHP non hanno una proprietà length.
Qual è la differenza tra count e sizeof in PHP?
Nessuna. sizeof() è un alias di count() e accetta gli stessi argomenti. La maggior parte del codice usa count(), e sizeof() può trarre in inganno chi conosce il C, dove indica i byte.
Come conto gli elementi di un array multidimensionale?
count($arr) conta solo il primo livello. count($arr, COUNT_RECURSIVE) conta ogni elemento a ogni profondità, e anche gli array annidati contano come elementi.
Perché count() lancia un TypeError in PHP 8?
Da PHP 8.0, count() accetta solo array e oggetti che implementano Countable. count(null) lancia TypeError: count(): Argument #1 ($value) must be of type Countable|array, null given, e count('abc') lo stesso con string given. Usa count($x ?? []) per un valore che potrebbe essere null, e strlen() per le stringhe.