PHP 数组长度:用 count() 与 sizeof() 统计

PHP 数组长度指的是数组中的元素数量,count() 是获取它的标准方式。要统计 PHP 数组元素数量,调用 count($array)(或 sizeof($array),两者是同一个函数)。对于索引数组和关联数组,count() 都返回顶层元素数量。对嵌套结构,COUNT_RECURSIVE 也会把子数组计入总数,所以只有在你确实需要这种行为时才使用它。

PHP 数组长度示例:统计元素数量

输出:

输出将显示在这里...

输出:

3

这个示例的工作原理

  1. $colors 保存一个包含三个字符串元素的索引数组。
  2. count($colors) 返回 3,即顶层元素总数。对关联数组同样如此:count() 统计的是键的数量,不是值的数量。
  3. 空数组会返回 0,因此把 count() 与零比较时,也可用来判断是否为空。

如何在 PHP 中获取数组长度

PHP 数组没有 .length 属性。count() 是获取 PHP 数组长度的标准方式,也适用于实现了 Countable 的对象。它始终返回 int。在 PHP 8.0+ 中,对不可计数的值调用 count() 会抛出 TypeError,因此当值不一定是数组时要先用 is_countable() 保护。

PHP count() 的常见错误

strlen() 误用为 count()

错误:

$items = ["a", "b", "c"];
echo strlen($items); // PHP 8+ 中会抛出 TypeError

正确:

echo count($items); // 3

strlen() 计算的是字符串字节长度,不是数组元素数量。

对不可计数的值调用 count()

错误:

$maybeArray = "abc";
echo count($maybeArray); // PHP 8+ 中会抛出 TypeError

正确:

$length = is_countable($maybeArray) ? count($maybeArray) : 0;
echo $length;

当值可能是标量或 null 时,先检查 is_countable() 再计数。

PHP 中 count()sizeof() 的区别

count()sizeof()
PHP 手册中记录的规范函数。count() 的别名,行为和性能完全一致。
在各类 PHP 代码库中都被广泛识别。容易让来自 C/C++ 的开发者误以为返回的是字节大小。

新代码统一优先使用 count()sizeof() 仅为兼容而保留,不增加任何价值,还可能误导熟悉其他语言的读者。

COUNT_NORMALCOUNT_RECURSIVE

$groups = ["水果" => ["苹果", "梨"], "颜色" => ["红色"]];

echo count($groups);                    // 2(顶层键)
echo count($groups, COUNT_RECURSIVE);   // 5(2 个键 + 3 个值)

COUNT_NORMAL(默认值,0)只统计顶层元素。COUNT_RECURSIVE(值为 1)会遍历所有嵌套数组,并把其中元素加入总数。数组存在循环引用时,递归计数会触发警告。只有当“把子数组里的元素也算进去”符合你的业务语义时才使用 COUNT_RECURSIVE,它并不是叶子值计数器。

常见问题

如何在 PHP 中获取数组长度?

调用 count($array) 即可获取元素数量。它适用于索引数组、关联数组,以及实现了 Countable 的对象。空数组会返回 0

count() 可以用于关联数组吗?

可以。count() 统计的是键数量,不管键是数字还是字符串。count(["a" => 1, "b" => 2]) 会返回 2

在 PHP 8 中把非数组传给 count() 会怎样?

在 PHP 8.0+ 中,字符串、整数、null 或普通对象等不可计数值会触发 TypeError。在 PHP 7.2+ 中,它会发出警告,并对标量返回 1(对 null 返回 0),这可能掩盖真实 bug。