count($arr) 直接返回二维数组的行数,即外层数组元素个数;需先用 is_array($arr) && !empty($arr) 确保变量为非空数组,避免 null、字符串等导致逻辑错误。

用 count() 获取二维数组的行数
PHP 中二维数组本质上是“一维数组,每个元素又是数组”,所以行数就是外层数组的长度。直接对整个数组调用 count() 即可,不需要加 COUNT_RECURSIVE 参数。
常见错误是误以为要遍历或取某个子数组的长度——那得到的是列数(某一行的元素个数),不是行数。
-
count($arr)返回外层数组元素个数,即行数 - 如果
$arr是空数组或未定义,count()返回 0,不会报错 - 如果
$arr不是数组(比如null或字符串),count()会返回 1(PHP 7.2+ 起对非数组参数发出E_WARNING,但仍返回 1)
确认变量确实是二维数组再计数
很多实际场景中,变量可能为 null、false、一维数组,甚至 JSON 解码失败后的 null。直接 count() 可能逻辑错而不报错。
建议先做类型判断:
立即学习“PHP免费学习笔记(深入)”;
- 用
is_array($arr) && !empty($arr)排除非数组和空情况 - 若需严格验证“至少有一行且该行是数组”,可加
is_array($arr[0])(注意检查isset($arr[0])避免未定义索引警告) - 不要依赖
count($arr[0])来反推行数——它返回的是第一行的列数
嵌套不规则时 count() 仍只算“行”
二维数组不要求每行长度一致。即使 $arr = [[1,2], [3], [4,5,6,7]],count($arr) 仍是 3。
这时候容易混淆的点:
-
count($arr, COUNT_RECURSIVE)返回所有元素总数(这里是 7),不是行数 - 用
array_keys($arr)再count()是多余操作,性能更差,且不解决根本问题 - 如果数组使用字符串键(如
['a' => [1], 'b' => [2,3]]),count()依然正确返回 2
从数据库或 JSON 来的数据要先检查结构
比如 PDO 查询返回 fetchAll() 结果是标准二维数组,count() 可靠;但 json_decode($json, true) 若解码失败返回 null,这时 count(null) 返回 1(PHP 8.0+ 改为 0),行为不一致。
稳妥做法:
- JSON 场景:先
json_last_error() === JSON_ERROR_NONE再count() - DB 场景:确认 fetch 模式为
PDO::FETCH_ASSOC或PDO::FETCH_NUM,避免意外返回对象 - 函数返回值不确定时,别省略
is_array()检查——这是线上count()返回异常值的最常见原因
行数这件事本身很简单,难在数据来源不可控。真正出问题的往往不是 count() 用错了,而是没意识到变量可能压根就不是数组。



















