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

使用递归函数获取PHP无限嵌套多维数组的所有键与值

无限层级嵌套数组无手动foreach实现方案

核心问题分析

之前的递归实现出错的核心原因有两点:

  • 仅将数组类型的键加入路径,未补充叶子节点的最终键
  • 路径数组使用引用传递但未做回溯处理,导致不同分支的路径数据互相累加污染

方案1:获取所有叶子节点的完整路径(匹配预期输出)

可直接运行的实现代码:

function getLeafPaths($array, $currentPath = [], &$result = []) {
    foreach ($array as $key => $value) {
        $tempPath = $currentPath;
        $tempPath[] = $key;
        if (is_array($value)) {
            // 子数组继续递归遍历
            getLeafPaths($value, $tempPath, $result);
        } else {
            // 叶子节点存入结果集
            $result[] = $tempPath;
        }
    }
    return $result;
}

// 调用示例
$testArray = [
    'options' => [
        'company_details' => [
            'contact' => [
                'company_name' => 'Some Name',
                'email' => 'info@example.com',
                'phone_mobile' => '043333333',
                'phone_work' => '012222233'
            ]
        ]
    ],
    'another_array' => 'some_data'
];

$allLeafPaths = getLeafPaths($testArray);
print_r($allLeafPaths);

输出结果完全匹配预期,每个叶子节点对应一条独立的完整路径数组,不会出现路径互相污染的问题。


方案2:替代手动多层foreach,实现无限层级数组处理

如果只是需要替换原有嵌套循环的功能(将原数组完整复制到新数组,支持无限层级),递归实现如下:

function recursiveProcess($source) {
    $result = [];
    foreach ($source as $key => $value) {
        // 非数组值可在这里加自定义处理逻辑
        $result[$key] = is_array($value) ? recursiveProcess($value) : $value;
    }
    return $result;
}

// 调用即可得到和原嵌套循环完全一致的处理结果
$array = recursiveProcess($form_data);

扩展:内置类实现(无需手动写递归)

PHP原生提供了RecursiveArrayIterator和RecursiveIteratorIterator类,可以直接实现无限层级数组遍历,不需要自己维护递归逻辑:

$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($testArray));
foreach ($iterator as $key => $value) {
    // 获取当前叶子节点的完整路径
    $path = [];
    for ($i = 0; $i < $iterator->getDepth(); $i++) {
        $path[] = $iterator->getSubIterator($i)->key();
    }
    $path[] = $key;
    // 此处处理业务逻辑即可,$path是完整路径,$value是叶子节点值
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 19:09:01