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;
}
?>
count
(PHP 4, PHP 5)
count — Count all elements in an array, or something in an object
Description
$var
[, int $mode
= COUNT_NORMAL
] )Counts all elements in an array, or something in an object.
For objects, if you have SPL installed, you can hook into count() by implementing interface Countable. The interface has exactly one method, Countable::count(), which returns the return value for the count() function.
Please see the Array section of the manual for a detailed explanation of how arrays are implemented and used in PHP.
Parameters
-
var
-
The array or the object.
-
mode
-
If the optional
mode
parameter is set toCOUNT_RECURSIVE
(or 1), count() will recursively count the array. This is particularly useful for counting all the elements of a multidimensional array.Cautioncount() can detect recursion to avoid an infinite loop, but will emit an
E_WARNING
every time it does (in case the array contains itself more than once) and return a count higher than may be expected.
Return Values
Returns the number of elements in var
.
If var
is not an array or not an object with
implemented Countable interface,
1 will be returned.
There is one exception, if var
is NULL
,
0 will be returned.
count() may return 0 for a variable that isn't set, but it may also return 0 for a variable that has been initialized with an empty array. Use isset() to test if a variable is set.
Changelog
Version | Description |
---|---|
4.2.0 |
The optional mode parameter was added.
|
Examples
Example #1 count() example
<?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
?>
Example #2 Recursive count() example
<?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
?>
See Also
- is_array() - Finds whether a variable is an array
- isset() - Determine if a variable is set and is not NULL
- strlen() - Get string length
Please note: While SPL is compiled into PHP by default starting with PHP 5, the Countable interface is not available until 5.1
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;
}
?>
I've read this somewhere else before, but experienced it first hand now, so I thought I'd post it here.
While in regular use, count() is pretty fast, this changes rapidly when used in a for loop. Example:
for ($x = 0; $x < count($array); $x++)
{
// some code here
}
If your array contains a lot of data, this code gets slowed down significantly. Better way to write this:
$arrayCount = count($array);
for ($x = 0; $x < $arrayCount; $x++)
{
// some code here
}
I didn't think it would make such a difference, but it did in my case - changed 15 seconds load time into 1 second!
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!";
?>
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
?>
As of PHP 5.2.6, count() DOES detect infinite recursion.
It triggers a warning when its argument is a recursive array.