IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> php 对数据转换成treephp文件目录列表转成tree状 -> 正文阅读

[PHP知识库]php 对数据转换成treephp文件目录列表转成tree状

文件目录列表如何转成tree状,即格式化文件目录列表,获得具有父子级关系数据后,再转成tree装数据结构。

目录列表转父子关系数据
/**

*格式化文件目录列表,使得数据具有父子级关系

*@param array $files 文件目录列表,如:[‘a/’,‘a/b/’,‘a/b/c.txt’,‘a/c/’,‘b’]

*@return array 父子级关系数组
*/

function format_file_list($files){

$data = []; //数组用来存放,格式化后的数据

sort($files); //对文件目录列表排序

foreach($files as k e y = > key=> key=>file){

p a t h = r t r i m ( path = rtrim( path=rtrim(file, ‘/’); //如果是目录,去掉目录后面的斜杠

$arr = explode(‘/’, $path); //把str路径转数组

$parent = ‘’; //定义动态路径,放下找时的临时存放路径

foreach($arr as $item){ //从顶级一级一级往下找

$pid = $parent == ‘’ ? 0 : d a t a [ data[ data[parent][‘id’]; //查找父ID

$parent .= $parent == ‘’ ? $item : ‘/’ . $item; //拼接路径

if(isset( d a t a [ data[ data[parent])) //如果已存在,跳过

continue;

d a t a [ data[ data[parent] = array(

‘id’ => $key+1, //ID

‘pid’ => $pid, //父ID

‘level’ => substr_count($parent, ‘/’) + 1, //层级

‘name’ => i t e m . ( s u b s t r ( item . (substr( item.(substr(file, -1) === ‘/’ ? ‘/’ : ‘’), //名称,如果是目录保留后面斜杠

‘path’ => $parent, //目录

);

}

}

return $data;

}

父子关系数据转tree/**

*列表转树形(迭代)

*@param array $list

*@param bool $useKey 是否使用ID作为键值

*@return array

*/

function list_to_tree($list, $useKey = false) {

l i s t = a r r a y c o l u m n ( list = array_column( list=arrayc?olumn(list, null, ‘id’);

foreach ($list as $key => $val) {

if ($val[‘pid’]) {

if (isset( l i s t [ list[ list[val[‘pid’]])) {

if ($useKey) {

l i s t [ list[ list[val[‘pid’]][‘children’][KaTeX parse error: Expected 'EOF', got '&' at position 8: key] = &?list[$key];

} else {

l i s t [ list[ list[val[‘pid’]][‘children’][] = & l i s t [ list[ list[key];

}

}

}

}

foreach ($list as $key => $val) {

if ( v a l [ ′ p i d ′ ] ) u n s e t ( val['pid']) unset( val[pid])unset(list[$key]);

}

if ($useKey) {

return $list;

} else {

return array_values($list);

}

}

用例测试//首先读取一个压缩包目录列表,作为测试初始数据

$zip = new ZipArchive;

$zip->open(‘C:\Users\XQ\Desktop\bootstrap-4.4.1-dist.zip’, ZipArchive::CREATE);

$list = [];

for($i = 0; $inumFiles; $i++){

$stat = z i p ? > s t a t I n d e x ( zip->statIndex( zip?>statIndex(i);

$list[] = iconv(‘GBK//IGNORE’, ‘UTF-8’, $stat[‘name’]);

}

//得到:

//Array(

// [0] => bootstrap-4.4.1-dist/

// [1] => bootstrap-4.4.1-dist/js/

// [2] => bootstrap-4.4.1-dist/js/bootstrap.min.js.map

// [3] => bootstrap-4.4.1-dist/js/bootstrap.min.js

// [4] => bootstrap-4.4.1-dist/css/

// [5] => bootstrap-4.4.1-dist/css/bootstrap.min.css

// [6] => bootstrap-4.4.1-dist/css/bootstrap.min.css.map

//)

print_r(list_to_tree(format_file_list($list)));

结果输出Array(

[0] => Array

[id] => 1

[pid] => 0

[level] => 1

[name] => bootstrap-4.4.1-dist/

[path] => bootstrap-4.4.1-dist

[children] => Array(

[0] => Array(

[id] => 2

[pid] => 1

[level] => 2

[name] => css/

[path] => bootstrap-4.4.1-dist/css

[children] => Array(

[0] => Array(

[id] => 3

[pid] => 2

[level] => 3

[name] => bootstrap.min.css

[path] => bootstrap-4.4.1-dist/css/bootstrap.min.css

)

[1] => Array(

[id] => 4

[pid] => 2

[level] => 3

[name] => bootstrap.min.css.map

[path] => bootstrap-4.4.1-dist/css/bootstrap.min.css.map

)

)

)

[1] => Array(

[id] => 5

[pid] => 1

[level] => 2

[name] => js/

[path] => bootstrap-4.4.1-dist/js

[children] => Array(

[0] => Array(

[id] => 6

[pid] => 5

[level] => 3

[name] => bootstrap.min.js

[path] => bootstrap-4.4.1-dist/js/bootstrap.min.js

)

[1] => Array(

[id] => 7

[pid] => 5

[level] => 3

[name] => bootstrap.min.js.map

[path] => bootstrap-4.4.1-dist/js/bootstrap.min.js.map

)

)

)

)

)

)

完成!

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-10-17 12:12:45  更:2022-10-17 12:12:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/27 1:03:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码