You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PHP编写可返回任意维度数组所有值的函数?

处理任意维度数组的递归解法

嘿,我来帮你搞定这个问题!其实你完全不需要先计算数组的维度——递归函数才是处理任意多维数组最灵活、最简洁的方案,它会自动深入每一层嵌套的数组,直到找到非数组类型的值。

为什么不用维度计数的方法?

你写的countdim函数有个局限性:如果数组里混合了不同层级的元素(比如有的元素是普通值,有的是深层数组),它会判断错误。比如["a", ["b", ["c"]]],countdim会返回1(因为第一个元素不是数组),但实际这个数组是三维的。递归就完全没有这个问题,它会逐个检查每个元素,不管位置在哪里。

递归实现的resolve_array函数

直接修改你的函数,用递归代替固定嵌套的循环:

<?php
function resolve_array($array) {
    foreach ($array as $value) {
        // 如果当前元素是数组,就递归调用自己处理这个子数组
        if (is_array($value)) {
            resolve_array($value);
        } else {
            // 非数组值,直接输出(你也可以改成收集到数组里)
            echo $value . PHP_EOL; // 加换行让输出更清晰
        }
    }
}
?>

测试示例

用一个混合维度的数组测试一下:

$multiDimensionalArray = [
    "第一层文本",
    ["第二层值1", "第二层值2", ["第三层值1", "第三层值2"]],
    123,
    ["第四层的数组", ["第五层的嵌套值"]]
];

resolve_array($multiDimensionalArray);

输出结果会是:

第一层文本
第二层值1
第二层值2
第三层值1
第三层值2
123
第四层的数组
第五层的嵌套值

进阶:收集所有值到一维数组

如果你不想直接输出,而是要把所有值收集到一个一维数组里(更实用的场景),可以修改函数用引用传递结果数组:

<?php
function resolve_array($array, &$result = []) {
    foreach ($array as $value) {
        if (is_array($value)) {
            resolve_array($value, $result);
        } else {
            $result[] = $value;
        }
    }
    return $result;
}

// 使用方式
$allValues = resolve_array($multiDimensionalArray);
print_r($allValues);
?>

这样$allValues就是包含所有值的一维数组,输出类似:

Array
(
    [0] => 第一层文本
    [1] => 第二层值1
    [2] => 第二层值2
    [3] => 第三层值1
    [4] => 第三层值2
    [5] => 123
    [6] => 第四层的数组
    [7] => 第五层的嵌套值
)

这种递归方法不管数组有多少层嵌套,都能完美处理,而且代码比动态生成嵌套循环简单太多啦!

内容的提问来源于stack exchange,提问作者Aryan amish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:03:17