加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

在PHP中构建来自多维数组的路径

发布时间:2020-12-13 17:50:11 所属栏目:PHP教程 来源:网络整理
导读:我有一个数组,如: $tree = array( 'folder_1' = array( 'folder_1_1','folder_1_2' = array( 'folder_1_2_1','folder_1_2_2' ),'folder_1_3' ),'folder_2' = array( 'folder_2_1' = array( 'folder_2_1_1' = array( 'folder_2_1_1_1','folder_2_1_1_2' ) ),
我有一个数组,如:

$tree = array(
    'folder_1' => array(
        'folder_1_1','folder_1_2' => array(
            'folder_1_2_1','folder_1_2_2'
        ),'folder_1_3'
    ),'folder_2' => array(
        'folder_2_1' => array(
            'folder_2_1_1' => array(
                'folder_2_1_1_1','folder_2_1_1_2'
            )
        ),)
);

我正在尝试构建一个路径数组:

$paths = array(
    'folder_1','folder_1/folder_1_1','folder_1/folder_1_2','folder_1/folder_1_2/folder_1_2_1','folder_1/folder_1_2/folder_1_2_2','folder_2','folder_2/folder_2_1',...
);

我似乎无法找到实现这一目标的方法.我遇到的问题是文件夹名称可以是数组键,也可以是数组元素.

这是我到目前为止所做的,但我没有接近解决方案……

$paths = transform_tree_to_paths($trees);

function transform_tree_to_paths($trees,$current_path = '',$paths = array())
{

    if (is_array($trees)) {
        foreach ($trees as $tree => $children) {
            $current_path .= $tree . '/';
            return transform_tree_to_paths($children,$current_path,$paths);
        }
        $paths[] = $current_path;
        $current_path = '';
    } else {
        $paths[]  = $trees;
    }

    return $paths;
}

解决方法

这样的事怎么样?

function gen_path($tree,$parent=null) {
    $paths = array();

    //add trailing slash to parent if it is not null
    if($parent !== null) {
        $parent = $parent.'/';
    }

     //loop through the tree array
     foreach($tree as $k => $v) {
        if(is_array($v)) {
            $currentPath = $parent.$k;
            $paths[] = $currentPath;
            $paths = array_merge($paths,gen_path($v,$currentPath));
        } else {
            $paths[] = $parent.$v;
        }
    }

    return $paths;
}

你朝着正确的方向前进,但有点错过了标记.函数中的递归函数调用之前的return语句导致从不调用foreach循环之后的所有内容.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读