$paths = ['aa','aa/bb','ww/yyy','aa/kk','xx/oo/pp'];

根据这个数组,转成目录树的结构,如下:

aa

-bb

-kk

ww

-yyy

xx

-oo

–pp

// 把这类数据转换成无限级格式...

$paths = ['aa','aa/bb/bb','ww/yyy/bb','aa/kk','xx/oo/pp'];

$data = [];

$id = 0;

foreach($paths as $path){

$tmps = explode('/', $path);

$parent = '';

foreach($tmps as $v){

$parentID = $parent == '' ? 0 : $data[$parent]['id'];

$parent .= $parent == '' ? $v : '/' . $v;

if( ! isset($data[$parent]) ){

$id++;

$tmp = array(

'id' => $id,

'parent_id' => $parentID,

'key' => $v,

'path' => $parent,

);

$data[$parent] = $tmp;

}

}

}

print_r($data);

// 再以无限级方式处理数据 $data

<?php

$paths = ['aa','aa/bb/bb','ww/yyy/bb','aa/kk','xx/oo/pp'];

$arr = [];//先定义一个空数组用来存储所有路径。

//循环找出所有路径

foreach($paths as $v){

$path = explode('/',$v);

$temp = '';

foreach($path as $k2=>$v2){

$temp .= empty($temp)?$v2:'/'.$v2;

$arr[$temp] = $temp;

}

}

sort($arr); //排序

//循环输出

foreach($arr as $v){

$path = explode('/',$v);

$n = count($path);

echo line($n).$path[$n-1]."\n";

}

function line($n){

$line = '';

for($i=1;$i<$n;$i++){

$line .= '-';

}

return $line;

}

为什么不弄成二维数组。

可以用无限极分类

想办法弄成这样

元素  id  pid

aa    1   0

bb    2   1

ww    3   0

yyy   4   3

kk    5   1

xx    6   0

oo    7   6

pp    8   7

用无限极分类的思想

// 重排数组

$paths = ['aa','aa/bb','ww/yyy','aa/kk','xx/oo/pp'];

sort($paths);

// 得到结果数组:k为值,v为前面-

$res = [];

foreach ($paths as $v) {

// 拆分路径

$path = explode('/', $v);

foreach ($path as $k1 => $v1) {

// 此项前面几个-

$res[$v1] = '';

for ($i=0; $i < $k1; $i++) {

$res[$v1] .= '-';

}

}

}

// 输出

foreach ($res as $k => $v) {

echo "$v$k<br>";

}

php 数组转目录树,PHP根据路径数组转成一个目录树相关推荐

  1. poj 2352 Stars 线段树(先建后查/边建边查)/树状数组三种方法思路详解,带你深入了解线段树难度⭐⭐⭐★

    poj 2352 Stars 目录 poj 2352 Stars 1.树状数组 2.线段树,先建树后查找 3.线段树,边建树边查找 Description Astronomers often exam ...

  2. 树链剖分 + 后缀数组 - E. Misha and LCP on Tree

    E. Misha and LCP on Tree Problem's Link Mean: 给出一棵树,每个结点上有一个字母.每个询问给出两个路径,问这两个路径的串的最长公共前缀. analyse: ...

  3. python 打开路径下文件_Python使用os.listdir()和os.walk()获取文件路径与文件下所有目录的方法...

    在python3.6版本中去掉了os.path.walk()函数 os.walk() 函数声明:walk(top,topdown=True,oneerror=None) 1.参数top表示需要遍历的目 ...

  4. 路径前缀是什么意思_Trie 树是什么样的数据结构?有哪些应用场景?

    (给算法爱好者加星标,修炼编程内功) 作者:神奕 blog.csdn.net/lisonglisonglisong/article/details/45584721 [前言]在计算机科学中,trie, ...

  5. linux 树状结构图,linux下tree指令的用法, 树状图列出目录, 树状图逐级列出目录...

    tree命令,主要功能是创建文件列表,将所有文件以树的形式列出来 linux下的tree就比较强大了,但一般系统并不自带这个命令,需要手动下载安装, 安装 sudo apt install tree ...

  6. php 截取www后面的目录,php-如何从字符串路径中获取最后一个目录

    php-如何从字符串路径中获取最后一个目录 我试图从我存储在字符串中的路径中获取最后一个文件夹名称. 例如:Home/new_folder/test result = test Rickstar as ...

  7. python listdir 共享目录 认证_Python使用os.listdir()和os.walk()获取文件路径与文件下所有目录的方法...

    在python3.6版本中去掉了os.path.walk()函数 os.walk() 函数声明:walk(top,topdown=True,oneerror=None) 1.参数top表示需要遍历的目 ...

  8. 【已阅】Linux命令行操作/选项介绍,文件分类/内容与属性/绝对相对路径,隐藏文件与整个目录结构

    Linux的命令行操作介绍 Linux操作的特点:纯命令行,当然Linux它也有图形化界面或桌面版. Windows也有命令行,也有图形化界面.不过它是面向普通客户的操作系统,所以必须得是好用好玩的, ...

  9. linux下oracle安装路径查看,Linux Oracle 安装目录说明

    Linux 操作系统主要目录 /bin:存放着一百多个Linux下常用的命令.工具 /dev:存放着Linux下所有的设备文件 /home:用户主目录,每建一个用户,就会在这里新建一个与用户同名的目录 ...

最新文章

  1. python离线包安装_python 通过pip freeze、dowload打离线包及自动安装的过程详解(适用于保密的离线环境...
  2. ajax上传plupload的使用
  3. BZOJ——2697: 特技飞行
  4. 路遥工具箱全面迁移至 .NET 6.0 并发布 3.0 版本及迁移记录详解
  5. 前端自动化之nvm安装
  6. 洛谷P2879 [USACO07JAN]区间统计Tallest Cow
  7. 字节跳动面试必问:kafkagroupid数目
  8. 这次都安排上了,零食好物全都 9 块 9 。
  9. 51nod1118--简单DP
  10. 单元格自适应宽度_Excel – 合并单元格时,如何同时保留每个单元格的内容?...
  11. 火焰识别python_OpenCV_火焰检测——完整代码
  12. 如何通过5S管理改变工作环境?
  13. oracle全库导入 imp,imp导入全数据库
  14. NLTK文本分割器是如何工作的
  15. JAVA、android常用时间处理方法及类似微信微博发表时间显示
  16. 明哥,给大学生的几点建议
  17. 第三方支付简要原理解释说明
  18. antv/G6使用详细介绍,一篇文章说清antv G6如何使用
  19. WPS格式转换成Word的方法
  20. 阿里云DDoS防护和DDoS高防有什么区别

热门文章

  1. pandas使用drop_duplicates函数基于subset参数指定的数据列子集删除重复行、并设置keep参数保留重复行中的最后一个数据行
  2. R语言apriori算法进行关联规则挖掘(限制规则的左侧或者右侧的内容进行具体规则挖掘)、使用subset函数进一步筛选生成的规则去除左侧规则中的冗余信息、获取更独特的有新意的关联规则
  3. R语言构建logistic回归模型并评估模型:构建基于混淆矩阵计算分类评估指标的自定义函数、阳性样本比例(垃圾邮件比例)变化对应的分类器性能的变化、基于数据阳性样本比例选择合适的分类评估指标
  4. R语言构建xgboost模型:使用xgboost构建广义线性模型(GLM):使用gblinear算法拟合线性模型并配置L1和L2正则化
  5. python使用pandas基于时间条件查询多个oracle数据表
  6. python代码实现二叉树的镜像树
  7. python合并两个字典的内容,使用update方法
  8. clusterProfiler对差异表达基因进行富集分析
  9. 奇瑞s61鸿蒙,数码提前曝光,奇瑞新能源 S61 将搭载华为鸿蒙车机系统
  10. java 流转文件_java 实现 word 文档的在线编辑以及流转