search for in the  
<compactcurrent>
Last updated: Thu, 19 May 2005

count

(PHP 3, PHP 4, PHP 5)

count -- Count elements in an array, or properties in an object

Description

int count ( mixed var [, int mode] )

Returns the number of elements in var, which is typically an array, since anything else will have one element.

For objects, if you have SPL installed, you can hook into count() by implementing interface Countable. The interface has exactly one method, count(), which returns the return value for the count() function.

If var is not an array or an object with implemented Countable interface, 1 will be returned. There is one exception, if var is NULL, 0 will be returned.

Note: The optional mode parameter is available as of PHP 4.2.0.

If the optional mode parameter is set to COUNT_RECURSIVE (or 1), count() will recursively count the array. This is particularly useful for counting all the elements of a multidimensional array. The default value for mode is 0. count() does not detect infinite recursion.

Caution

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.

Please see the Array section of the manual for a detailed explanation of how arrays are implemented and used in PHP.

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 >= 4.2.0)

<?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(), isset(), and strlen().



User Contributed Notes
count
david _at_ webgroup _dot_ org
12-Feb-2005 06:30
While michael at htmlland dot net's code works, I believe it is better to use:
$extension=substr($file,strrpos($file,".")+1);

This doesn't incur the overhead of array handling.  I haven't tested it for time functions, but it should work just as well and SHOULD be faster.
freefaler at gmail dot com
19-Nov-2004 07:01
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
?>
moazzam at ummah dot org
14-Oct-2004 06:59
This is an obvious note, but I am writing it any way so other, who did may not have observed this, can take advantage of it too.

When running loops with count conditions, the code runs faster if you first assign the count() value to a variable and use that (instead of using count() directly in a loop condition.

To explain my point better, here is an example:

<?php

for ($i=0; $i<10000; $i++) {
  
$arr[] = $i;
}

$time11 = microtime_float();
$bf = "";
for (
$i=0; $i<count($arr); $i++) {
  
$bf .= $arr[$i]."\n";
}
$time12 = microtime_float();
$time1 = $time12 - $time11;

print
"First: ".$time1."\n";

$time21 = microtime_float();
$l = count($arr);
for (
$i=0; $i<$l; $i++) {
  
$bf .= $arr[$i]."\n";
}
$time22 = microtime_float();
$time2 = $time22 - $time21;

print
"Second: ".$time2."\n";

?>

The output from the code above is (when run many times):

First: 0.13001585006714
Second: 0.099159002304077

First: 0.12128901481628
Second: 0.079941987991333

First: 0.18690299987793
Second: 0.13346600532532

As you can see, the second method (which doesnt use count() directly in the loop) is faster than the first method (which uses count() directly in the loop).

BTW:  I copied the microtime_float() function from one of the comments in the microtime() section. It just returns time with microseconds as float. Check comments in microtime() for more info.
michael at htmlland dot net
04-Jun-2004 12:30
I have found on upload scripts or on file manipulation scripts that people can trick a classic file type filter:
example:
$filename="bob.jpg.wav";
$bits= explode(".",$filename);
$extention= $bits[1];
if($extention == "jpg"){ echo"Not correct"; exit; }

This returns the filename extention as jpg not wav.

One way to change this is to use count() :
example:
$filename="bob.jpg.wav";
$bits= explode(".",$filename);
$extention= $bits[count($bits) - 1];
if($extention == "jpg"){ echo"Not correct"; exit; }

This returns the filename extention as wav not jpg.
rolandfoxx at yahoo dot com
30-Mar-2004 06:13
As an addition, any of the array manipulation functions can likewise get count to once again return 0:

<?php
$a
= array();
print(
count($a)); // prints 0
$a[0] = "foo";
array_shift($a);
print(
count($a)); //prints 0
$a[0] = "bar";
array_splice($a, 0, 1);
print(
count($a)); //prints 0
?>
admin at lft-muenchen dot de
12-Mar-2003 06:18
Note:
print (strlen($a)); // will print 0
$a="";
print (strlen($a)); // will print 1
$a=null;
print (strlen($a)); // will print 1
$a=array();
print (strlen($a)); // will print 0

you can only get an array back to size 0 by using the array() command, not by just setting it to "" or null.
simon at invalid dot com
20-Aug-2002 02:40
Reminder for using count():

<?php
$ary
= array(null, "a", "b", null);
echo
count($ary);    // count: 4

$ary[10] = "c";
echo
count($ary);    // count: 5

$ary[15] = null;
echo
count($ary);    // count: 6
?>

=> NULL is seen as an element in count()

Count 2D array:

<?php
$a2Dary
= array(array("a", "b") , array(), "v");

echo
count($a2Dary);        // count: 3
echo count($a2Dary[0]);    //count 2
echo count($a2Dary[1]);    // count: 0
echo count($a2Dary[2]);    // count: 1
?>

Hope can help you
bryce at obviously dot com
22-Jul-2002 05:44
If you're working with a database, you'll probably have much greater luck with: mysql_num_rows( $result );
08-Jul-2002 11:18
Perhaps change the wording of this description from "Count elements in a variable" to "Count total elements in a variable" as it may be interpreted (by me) as a function for counting specific elements (ie, number of substrings)
webmaster at NOSPAMtrafficg dot com
26-Apr-2002 05:48
Counting a multi-dimentional array

test array

<?php
$settings
[0][0]  = 128;
$settings[0][1]  = 256;
$settings[0][2]  = 384;
$settings[0][3]  = 512;
$settings[0][4]  = 1024;
$settings[0][5]  = 2048;

$settings[1][0]  = 1024;
$settings[1][1]  = 2048;
$settings[1][2]  = 3072;
$settings[1][3]  = 4096;

count($settings) // returns 2
count($settings[0]) // returns 6
count($settings[1]) // returns 4
?>
markis dot brachel at ntlworld dot com
12-Apr-2002 07:25
Someone said you couldn't use the for loop and count array command for processing arrays with missing entries.

Well, heres my working idea:

<?
// Set up the array
  
$holes  = array ("first", 2 => "second", 5 => "fifth", "sixth");
// Note blank entries 3 and 4

//count number of entries, this time its 4
$array_count = count($holes);
for(
$y=0; $y<$array_count; $y++) {
   if(isset(
$holes[$y])) {
   echo(
$holes[$y]);
   }
   else {
$array_count++; }
}
// In the middle, check where array entry exists
// If not, then increase the size of array_count
// to reflect gaps in array.

?>
07-Feb-2002 08:01
<?php
count
(false) ==1
?>

this has tripped me up before...
kanareykin at denison dot edu
26-Mar-2001 03:13
Here's how to count non-empty elements
in an array of any dimension. Hope
it will be useful for somebody.

<?php
// recursively count all non-empty elements
// in array of any dimension or mixed - i.e.
// array('1' => 2, '2' => array('1' => 3, '2' => 4))
function count_all($arg)
{
  
// skip if argument is empty
  
if ($arg)    {
      
// not an array, return 1 (base case)
      
if(!is_array($arg))
           return
1;
      
// else call recursively for all elements $arg
      
foreach($arg as $key => $val)
          
$count += count_all($val);
          
       return
$count;       
   }
}
?>
martin at complinet dot com
30-Nov-2000 06:31
The count function does not ignore null values in an array. To achieve this use this function.

<?php
function xcount($array) {
       while (list(
$key, $value) = each($array)) {
               if (
$value) {
                      
$count++;
               }
       }
return
$count;
}
?>
admin at serverbase dot com
03-Oct-2000 01:24
Be carefull with count when using in a while (list()=each()) construct, count changes the internal array pointer and strange things will happen :-)
jmcastagnetto at php dot net
04-Sep-2000 02:30
If you want to disambiguate if a variable contains an array w/ only one element, just us is_array() or gettype()
legobuff at hotmail dot com
02-Feb-2000 12:43
This is taken from sganer@expio.co.nz comments on the sizeof() function:
If some elements in your array are not set, then sizeof() and count() will not return the index of the last element, but will return the number of set elements. To find the index of the last element in the array:

end($yourArray);
$index = key($yourArray);

... Where $yourArray is the array you want to find the last index ($index) of.
chopin at csone dot kaist dot ac dot kr
25-Aug-1999 05:13
sizeof(), count() function is for only array not string data type.
ex) $str = "abcd";
   echo $str[3] ; // string indexing like array
   echo sizeof(str); // return 1 always
dmb27 at cornell dot edu
30-Jun-1999 03:53
Be careful of recasting your variables, especially with database array returns:

<?php
$res
= mysql_query("select * from blah") // a query that returns an empty set
$row = mysql_fetch_array($res); // get's 0 since there's no return
echo count($row); // echos 1 - since $row is not an array
echo $row[0]; // echos "", but casts $row as an array?
echo count($row); // echos 0 now
?>

<compactcurrent>
 Last updated: Thu, 19 May 2005
Copyright © 2001-2005 The PHP Group
All rights reserved.
This unofficial mirror is operated at: The Server Pages
Last updated: Thu May 19 17:35:34 2005 CDT