# count

(PHP 4, PHP 5, PHP 7)

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

### 说明

count ( mixed `$array_or_countable` [, int `$mode` = COUNT_NORMAL ] ) : int

统计出数组里的所有元素的数量，或者对象里的东西。

对于对象，如果安装了 SPL，可以通过实现 Countable 接口对 count()挂钩（hook） 。该接口只有一个方法 Countable::count()，此方法为 count() 函数返回值。

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

### 参数

`array_or_countable`

  数组或者 Countable 对象。

`mode`

  如果可选的 `mode` 参数设为 `COUNT_RECURSIVE`（或 1），count() 将递归地对数组计数。对计算多维数组的所有单元尤其有用。

  Caution

  count() 能检测递归来避免无限循环，但每次出现时会产生 `E_WARNING` 错误 （如果 array 不止一次包含了自身）并返回大于预期的统计数字。

### 返回值

返回 `array_or_countable` 中的单元数目。 如果参数既不是数组，也不是实现 Countable 接口的对象，将返回 1。 有个例外：如果 `array_or_countable` 是 `NULL` 则结果是 0。

### 范例

Example #1 count() 例子

    <?php
    $a[0] = 1;
    $a[1] = 3;
    $a[2] = 5;
    var_dump(count($a));

    $b[0]  = 7;
    $b[5]  = 9;
    $b[10] = 11;
    var_dump(count($b));

    var_dump(count(null));

    var_dump(count(false));
    ?>

以上例程会输出：

    int(3)
    int(3)

    Warning: count(): Parameter must be an array or an object that implements Countable in … on line 12 // PHP 7.2 起
    int(0)

    Warning: count(): Parameter must be an array or an object that implements Countable in … on line 14 // PHP 7.2 起
    int(1)

Example #2 递归 count() 例子

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

    ?>

### 更新日志

版本 | 说明
--- | ---
7.2.0 | 当无效的 countable 类型传递给 `array_or_countable` 参数时，count() 会产生警告。

### 参见

- is_array() - 检测变量是否是数组
- isset() - 检测变量是否已设置并且非 NULL
- empty() - 检查一个变量是否为空
- strlen() - 获取字符串长度