| |
|
开发:
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 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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年11日历 | -2024/11/22 19:47:41- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |