count()
In PHP, la funzione count() restituisce il numero di elementi in un array o le proprietà di un object che implementa Countable.
La funzione count() è una funzione PHP integrata che restituisce il numero di elementi in un array. Può anche contare un object se quest'ultimo implementa l'interfaccia Countable. È una delle funzioni per array più utilizzate in PHP, tipicamente per scoprire quanti elementi contiene una lista prima di iterarla, paginarla o validarla.
Questo capitolo tratta la sintassi, la modalità di conteggio ricorsivo opzionale, il comportamento di count() su object e valori limite, e gli errori più comuni da evitare.
Sintassi della funzione count()
La sintassi della funzione count() è semplice. Accetta un argomento, ovvero l'array o l'object da contare. La funzione restituisce un intero che rappresenta il numero di elementi o proprietà.
<?php
count(mixed $array_or_object, int $mode = COUNT_NORMAL): intNota: La firma tipizzata sopra riflette PHP 8.0+. In PHP 8.0+, passare un tipo non contabile (come una string o un intero) genera un
ValueError. Le versioni precedenti di PHP non hanno suggerimenti di tipo rigidi ma si comportano in modo identico. Nota:sizeof()è un alias legacy dicount()e si comporta in modo identico.
Il secondo argomento, $mode, è opzionale e viene usato per specificare come deve comportarsi la funzione count(). Accetta due possibili valori:
COUNT_NORMAL: Questa è la modalità predefinita e si comporta come la funzionecount()senza il parametro$mode. Conta semplicemente il numero di elementi nell'array o le proprietà nell'object.COUNT_RECURSIVE: Questa modalità conta ricorsivamente gli elementi negli array e negli object annidati.
<?php
$data = array('apple', array('banana', 'cherry'));
echo count($data); // Output: 2
echo count($data, COUNT_RECURSIVE); // Output: 4Con COUNT_NORMAL (il valore predefinito) count($data) restituisce 2: l'array esterno contiene due elementi — la string 'apple' e l'array interno. Con COUNT_RECURSIVE, PHP conta anche gli elementi all'interno di ogni array annidato, restituendo 4: 'apple', l'array interno stesso, 'banana' e 'cherry'. Utilizza la modalità ricorsiva solo quando hai davvero bisogno del conteggio totale su tutti i livelli di annidamento — attraversa l'intera struttura ed è più lento su array grandi e profondamente annidati.
Esempi di utilizzo della funzione count()
Vediamo alcuni esempi pratici di come la funzione count() può essere utilizzata per contare gli elementi in un array e le proprietà in un object.
Esempio 1: Contare gli elementi in un array
Contare gli elementi in un array in PHP
In questo esempio, abbiamo un array chiamato $fruits contenente tre elementi. La funzione count() restituisce 3, che rappresenta il numero totale di elementi nell'array.
Esempio 2: Contare le proprietà in un object
Contare le proprietà in un object in PHP
<?php
class Person implements Countable
{
public $name;
public $age;
public function count()
{
return count(get_object_vars($this));
}
}
$person = new Person();
$person->name = 'John';
$person->age = 30;
echo count($person); // Output: 2In questo esempio, abbiamo una semplice classe chiamata Person con due proprietà pubbliche, $name e $age. Creiamo una nuova istanza della classe Person e impostiamo i valori delle sue proprietà. Poiché la classe implementa l'interfaccia Countable, chiamare count($person) invoca il metodo personalizzato count(), che restituisce 2. Questo dimostra come il comportamento di count() possa essere personalizzato per gli object.
Nota: Senza l'interfaccia
Countable, passare un object ordinario acount()genera unTypeErrorin PHP 8.0+.count()non conta automaticamente le proprietà di un object — se lo desideri, usa direttamentecount(get_object_vars($obj)).
Errori comuni e casi limite
Alcuni comportamenti di count() sorprendono regolarmente gli sviluppatori:
- Contare
nullo scalari genera un errore in PHP 8. In PHP 7.2–7.4,count(null)emetteva un avviso e restituiva0, e contare uno scalare non contabile restituiva1. Da PHP 8.0, passare qualsiasi valore non contabile (null, una string, un intero) genera unTypeError. Verifica il valore prima quando potrebbe non essere un array. count()non è una funzione per la lunghezza delle stringhe. Per contare i caratteri in una string usastrlen(), noncount().- Solo il livello superiore viene contato per impostazione predefinita. Come mostrato sopra, gli array annidati contano come un singolo elemento a meno che non si passi
COUNT_RECURSIVE.
<?php
$value = null;
// Safe even when $value is not an array:
$total = is_array($value) ? count($value) : 0;
echo $total; // Output: 0Usa is_array() per assicurarti che un valore sia contabile prima di chiamare count() su dati il cui tipo non controlli (ad esempio, JSON decodificato o una riga di database).
Funzioni correlate
array_count_values()— conta quante volte ogni valore distinto appare in un array.in_array()— verifica se un valore esiste in un array.array_push()— aggiunge elementi a un array (di cui si può poi farecount()).- Array multidimensionali — dove
COUNT_RECURSIVEè più utile. - foreach loop — itera sugli elementi appena contati.
Conclusione
La funzione count() è uno strumento piccolo ma essenziale per lavorare con gli array in PHP. Usala per dimensionare una lista prima di iterarla o paginarla, ricorri a COUNT_RECURSIVE quando hai bisogno di un conteggio completo su array annidati, e ricorda che in PHP 8.0+ devi passare un vero array (o un object Countable) — proteggi i valori incerti con is_array() prima. Con queste regole in mente, count() è un modo affidabile e leggibile per misurare le strutture dati da cui dipende il tuo codice.