count()
En PHP, la función count() devuelve el número de elementos de un array o las propiedades de un object.
La función count() es una función integrada de PHP que devuelve el número de elementos en un array. También puede contar un object si ese object implementa la interfaz Countable. Es una de las funciones de array más utilizadas en PHP, normalmente para saber cuántos elementos contiene una lista antes de iterarla, paginarla o validarla.
Este capítulo cubre la sintaxis, el modo de conteo recursivo opcional, el comportamiento de count() con objects y valores límite, y los errores más comunes que se deben evitar.
Sintaxis de la función count()
La sintaxis de la función count() es sencilla. Recibe un argumento, que es el array u object que se desea contar. La función devuelve un entero que representa el número de elementos o propiedades.
<?php
count(mixed $array_or_object, int $mode = COUNT_NORMAL): intNota: La firma con tipos anterior refleja PHP 8.0+. En PHP 8.0+, pasar un tipo no contable (como un string o un entero) lanza un
ValueError. Las versiones anteriores de PHP carecen de indicaciones de tipo estrictas, pero funcionan de forma idéntica. Nota:sizeof()es un alias heredado decount()y se comporta de forma idéntica.
El segundo argumento, $mode, es opcional y se usa para especificar cómo debe comportarse la función count(). Acepta dos valores posibles:
COUNT_NORMAL: Este es el modo predeterminado y se comporta igual que la funcióncount()sin el parámetro$mode. Simplemente cuenta el número de elementos en el array o las propiedades del object.COUNT_RECURSIVE: Este modo cuenta recursivamente los elementos en arrays y objects anidados.
<?php
$data = array('apple', array('banana', 'cherry'));
echo count($data); // Output: 2
echo count($data, COUNT_RECURSIVE); // Output: 4Con COUNT_NORMAL (el modo predeterminado), count($data) devuelve 2: el array externo contiene dos elementos — el string 'apple' y el array interno. Con COUNT_RECURSIVE, PHP también cuenta los elementos dentro de cada array anidado, por lo que devuelve 4: 'apple', el propio array interno, 'banana' y 'cherry'. Utiliza el modo recursivo solo cuando realmente necesites el recuento total en todos los niveles de anidamiento — recorre toda la estructura y es más lento en arrays grandes y profundamente anidados.
Ejemplos de uso de la función count()
Veamos algunos ejemplos prácticos de cómo se puede utilizar la función count() para contar los elementos de un array y las propiedades de un object.
Ejemplo 1: Contar los elementos de un array
Contar los elementos de un array en PHP
En este ejemplo, tenemos un array llamado $fruits que contiene tres elementos. La función count() devuelve 3, que representa el número total de elementos del array.
Ejemplo 2: Contar las propiedades de un object
Contar las propiedades de un object en 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: 2En este ejemplo, tenemos una clase sencilla llamada Person con dos propiedades públicas, $name y $age. Creamos una nueva instancia de la clase Person y asignamos los valores de sus propiedades. Dado que la clase implementa la interfaz Countable, llamar a count($person) invoca el método personalizado count(), que devuelve 2. Esto demuestra cómo se puede personalizar el comportamiento de count() para objects.
Nota: Sin la interfaz
Countable, pasar un object ordinario acount()lanza unTypeErroren PHP 8.0+.count()no cuenta las propiedades de un object automáticamente — si necesitas eso, usacount(get_object_vars($obj))directamente.
Errores comunes y casos límite
Algunos comportamientos de count() suelen sorprender a los desarrolladores:
- Contar
nullo escalares lanza una excepción en PHP 8. En PHP 7.2–7.4,count(null)emitía una advertencia y devolvía0, y contar un escalar no contable devolvía1. Desde PHP 8.0, pasar cualquier valor no contable (null, un string, un entero) lanza unTypeError. Comprueba el valor primero si puede que no sea un array. count()no es una función para la longitud de strings. Para contar los caracteres de un string usastrlen(), nocount().- Por defecto solo se cuenta el nivel superior. Como se muestra arriba, los arrays anidados cuentan como un único elemento a menos que pases
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() para asegurarte de que un valor es contable antes de llamar a count() con datos cuyo tipo no controlas (por ejemplo, JSON decodificado o una fila de base de datos).
Funciones relacionadas
array_count_values()— cuenta cuántas veces aparece cada valor distinto en un array.in_array()— comprueba si un valor existe en un array.array_push()— añade elementos a un array (cuyo tamaño puedes luego obtener concount()).- Arrays multidimensionales — donde
COUNT_RECURSIVEresulta más útil. - Bucle foreach — itera sobre los elementos que acabas de contar.
Conclusión
La función count() es una herramienta pequeña pero esencial para trabajar con arrays en PHP. Úsala para obtener el tamaño de una lista antes de iterar sobre ella o paginarla, recurre a COUNT_RECURSIVE cuando necesites un recuento completo de arrays anidados, y recuerda que en PHP 8.0+ debes pasar un array real (o un object Countable) — protege los valores inciertos con is_array() primero. Con estas reglas en mente, count() es una forma fiable y legible de medir las estructuras de datos de las que depende tu código.