
本文介绍一种使用递归函数精确统计 php 数组中所有内部数组(包括多层嵌套)数量的方法,适用于任意深度的混合类型数组,并提供可直接运行的示例代码与关键注意事项。
本文介绍一种使用递归函数精确统计 php 数组中所有内部数组(包括多层嵌套)数量的方法,适用于任意深度的混合类型数组,并提供可直接运行的示例代码与关键注意事项。
在 PHP 中,若需统计一个混合类型数组(如包含整数、字符串及嵌套数组)中所有数组元素的总数(含深层嵌套),count() 或 array_filter(..., 'is_array') 等常规方法无法满足需求——它们仅能统计第一层的数组元素,而无法递归识别嵌套结构中的子数组。正确解法是采用递归遍历 + 类型判断策略。
以下是一个简洁、健壮的递归实现:
<?php
function countNestedArrays($array): int {
$count = 0;
foreach ($array as $item) {
if (is_array($item)) {
$count++; // 当前层级发现一个数组
$count += countNestedArrays($item); // 递归统计其内部数组
}
}
return $count;
}
// 示例数据
$array = [10, 'hello', [1, 2, 3, ['hi', 7]], [15, 67], 12];
echo countNestedArrays($array); // 输出:3
?>✅ 输出说明:该示例中,共存在 3 个数组:
- [1, 2, 3, ['hi', 7]](第 1 个)
- ['hi', 7](嵌套在上一层中,第 2 个)
- [15, 67](第 3 个)
⚠️ 注意事项:
- 此函数不修改原数组,纯函数式设计,安全可靠;
- 使用 is_array() 判断类型,避免误判对象或资源;
- 采用返回值累加方式(而非全局变量),更符合现代 PHP 编程规范,提升可测试性与可维护性;
- 时间复杂度为 O(n),其中 n 为数组及其所有嵌套子数组的总元素数;
- 若需排除空数组([]),可在 if 条件中追加 !empty($item) 判断。
? 进阶提示:如需同时获取每个子数组的路径或深度信息,可扩展函数参数(如添加 $depth = 0 和 $paths = []),用于调试或结构分析场景。
通过该方法,你可精准、高效地解析任意复杂度的嵌套数组结构,为数据校验、序列化预处理或配置解析等实际开发任务提供坚实基础。

















