Menu

PHP count(): lunghezza e numero di elementi di un array

count($arr) restituisce il numero di elementi di un array PHP, quindi count(['a', 'b', 'c']) vale 3. Impara a contare array annidati con COUNT_RECURSIVE, il rapporto tra sizeof() e count(), come contare i valori che corrispondono e perché count(null) lancia un TypeError da PHP 8.

Questa pagina include editor eseguibili: modifica, esegui e vedi subito l'output.

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.

Illustrazione dei linguaggi di programmazione di Coddy

Impara a programmare con Coddy

INIZIA