I actually find the following function more useful when it comes to multidimension arrays when you do not want all levels of the array tree.
// $limit is set to the number of recursions
<?php
function count_recursive ($array, $limit) {
$count = 0;
foreach ($array as $id => $_array) {
if (is_array ($_array) && $limit > 0) {
$count += count_recursive ($_array, $limit - 1);
} else {
$count += 1;
}
}
return $count;
}
?>
count
(PHP 4, PHP 5)
count — Cuenta todos los elementos de un array o en un objeto
Descripción
Cuenta todos los elementos en un array o en un objeto.
En objetos, si se tiene SPL instalado, se puede conectar a count() implementado el interfaz Countable. Este interfaz tiene solamente un método, Countable::count(), el cual devuelve el valor retornado de la función count().
Por favor ver la sección del manual Array para una explicación más extensa de como se implementan y usan los arrays en PHP.
Parámetros
-
var -
El array o el objecto
-
mode -
Si el parámetro opcional
modeestá definido con la constanteCOUNT_RECURSIVE(o 1), count() contará el array de forma recursiva. Esto es particularmente útil para contar todos los elementos de un array multidimensional.Precaucióncount() puede detectar recursividad para evitar un bucle infinito, pero lanzará un mensaje
E_WARNINGcada vez que lo haga (en caso de que el array se contenga a sí mismo más de una vez) y devolverá una cuenta mayor de la que se pueda esperar.
Valores devueltos
Devuelve el número de elementos en var,
Si var no es un array o no es un objecto con el interfaz
Countable implementado,
devolverá 1.
Existe una excepción, si var es NULL,
devolverá 0.
count() devolverá 0 si la variable que se intenta contar no está definida pero también devolverá 0 si la variable contiene un array vacío. Use isset() para comprobar si la variable está definida.
Historial de cambios
| Versión | Descripción |
|---|---|
| 4.2.0 |
Se añadió el parámetro opcional mode.
|
Ejemplos
Ejemplo #1 Ejemplo de count()
<?php
$a[0] = 1;
$a[1] = 3;
$a[2] = 5;
$result = count($a);
// $result == 3
$b[0] = 7;
$b[5] = 9;
$b[10] = 11;
$result = count($b);
// $result == 3
$result = count(null);
// $result == 0
$result = count(false);
// $result == 1
?>
Ejemplo #2 Ejemplo de count() recursivo
<?php
$food = array('fruits' => array('orange', 'banana', 'apple'),
'veggie' => array('carrot', 'collard', 'pea'));
// Count recursivo
echo count($food, COUNT_RECURSIVE); // muestra 8
// Count normal
echo count($food); // muestra 2
?>
Ver también
- is_array() - Comprueba si una variable es un array
- isset() - Determina si una variable está definida y no es NULL
- strlen() - Obtiene la longitud de un string
My function returns the number of elements in array for multidimensional arrays subject to depth of array. (Almost COUNT_RECURSIVE, but you can point on which depth you want to plunge).
<?php
function getArrCount ($arr, $depth=1) {
if (!is_array($arr) || !$depth) return 0;
$res=count($arr);
foreach ($arr as $in_ar)
$res+=getArrCount($in_ar, $depth-1);
return $res;
}
?>
Please note: While SPL is compiled into PHP by default starting with PHP 5, the Countable interface is not available until 5.1
Hi there,
there is a simple script with example for counting rows and columns of a two-dimensional array.
<?php
$data = array(
"apples" =>
array("red", "yellow", "pineapples"),
"bananas" =>
array("small", "medium", "big"),
"vegs" =>
array("potatoes", "carrots", "onions")
);
$rows = count($data,0);
$cols = (count($data,1)/count($data,0))-1;
print "There are {$rows} rows and {$cols} columns in the table!";
?>
As of PHP 5.2.6, count() DOES detect infinite recursion.
It triggers a warning when its argument is a recursive array.
If you want to count only elements in the second level of 2D arrays.A close to mind note, useful for multidimentional arrays:
<?php
$food = array('fruits' => array('orange', 'banana', 'apple'),
'veggie' => array('carrot', 'collard','pea'));
// recursive count
echo count($food,COUNT_RECURSIVE); // output 8
// normal count
echo count($food); // output 2
// all the fruits and veggies
echo (count($food,COUNT_RECURSIVE)-count($food,0)); //output 6
?>
