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

PHP实现多维数组转路径字符串数组(递归返回值方式)

问题描述

给定如下多维数组:

array (
   level1 => array ( level1.1,
                     level1.2),
   level2 => array ( level2.1,
                     level2.2 => array( level2.2.1 => 'foo',
                                        level2.2.2 => 'bar',
                                        level2.2.3 => 'test')
   )
)

期望转换为包含路径的字符串数组:

array ("level1/level1.1",
       "level1/level1.2",
       "level2/level2.1",
       "level2/level2.2/level2.2.1",
       "level2/level2.2/level2.2.2",
       "level2/level2.2/level2.2.3")

尝试了以下递归函数,但无法正确返回结果,希望不使用引用数组,仅通过返回值实现:

function displayArrayRecursively($array, string $path) : array {

        if($path == "")
            $result_array = array();

        foreach ($array as $key => $value) {
            if (is_array($value)) {
                $this->displayArrayRecursively($value, $path . $key . '/');
            } else {
                $result_array[] = $path . $key;            }
        }

        return $result_array;
    }
解决方案

修改后的递归函数如下:

function displayArrayRecursively($array, string $path = '') : array {
    $result_array = [];

    foreach ($array as $key => $value) {
        $currentPath = $path . $key;
        if (is_array($value)) {
            // 合并递归调用返回的路径数组到当前结果
            $result_array = array_merge(
                $result_array,
                $this->displayArrayRecursively($value, $currentPath . '/')
            );
        } else {
            $result_array[] = $currentPath;
        }
    }

    return $result_array;
}

修改说明:

  • 初始化结果数组:将$result_array的初始化移到函数开头,确保每次调用函数都能创建空数组用于收集结果,避免原代码中仅空路径时才初始化的逻辑漏洞。
  • 收集递归返回值:原代码调用递归函数时未处理返回结果,现在用array_merge把下层递归生成的路径数组合并到当前结果中,保证所有层级的路径都能被最终返回。
  • 简化路径拼接:先拼接当前键到路径中,数组类型的节点再追加/作为递归的前缀路径,减少重复代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 10:35:49