数组 函数
在线手册:中文  英文

count

(PHP 4, PHP 5)

count计算数组中的单元数目或对象中的属性个数

说明

int count ( mixed $var [, int $mode = COUNT_NORMAL ] )

统计一个数组里的所有元素,或者一个对象里的东西。

对于对象,如果安装了 SPL,可以通过实现 Countable 接口来调用 count()。该接口只有一个方法 Countable::count(),此方法返回 count() 函数的返回值。

关于 PHP 中如何实现和使用数组可以参考手册中数组章节中的详细描述。

参数

var

数组或者对象。

mode

如果可选的 mode 参数设为 COUNT_RECURSIVE(或 1), count() 将递归地对数组计数。对计算多维数组的所有单元尤其有用。mode 的默认值是 0count() 识别不了无限递归。

返回值

返回 var 中的单元数目。 如果 var 不是数组类型或者实现了 Countable 接口的对象,将返回 1,有一个例外,如果 varNULL 则结果是 0

Caution

count() 对没有初始化的变量返回 0,但对于空的数组也会返回 0。用 isset() 来测试变量是否已经初始化。

更新日志

版本 说明
4.2.0 添加了可选的 mode 参数。

范例

Example #1 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
?>

Example #2 递归 count() 例子

<?php
$food 
= array('fruits' => array('orange''banana''apple'),
              
'veggie' => array('carrot''collard''pea'));

// recursive count
echo count($foodCOUNT_RECURSIVE); // output 8

// normal count
echo count($food); // output 2

?>

参见


数组 函数
在线手册:中文  英文

用户评论:

nicolas dot grekas+php at gmail dot com (2011-09-10 11:29:18)

As of PHP 5.2.6, count() DOES detect infinite recursion.
It triggers a warning when its argument is a recursive array.

jezdec at email dot cz (2009-04-19 16:42:37)

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!";
?>

atoi_monte at hotmail dot com (2007-06-28 14:10:13)

Please note: While SPL is compiled into PHP by default starting with PHP 5, the Countable interface is not available until 5.1

danny at dannymendel dot com (2007-06-13 13:14:43)

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;
}
?>

alexandr at vladykin dot pp dot ru (2006-11-08 04:28:14)

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;
  }
?>

freefaler at gmail dot com (2004-11-19 17:01:53)

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
?>

易百教程