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
相关产品推荐
相关产品推荐

