分享一个生成文件层级树类

互联网 20-6-6

根据 php 递归读取文件夹生成文件树

class Tree {     public $arr = array();     public $icon = array(         '│',         '├─',         '└─'     );     public $ret;     public function set_tree($arr = array())     {         $this->arr = $arr;     }     public function get_child($myid)     {         $newarr = array();         if (is_array($this->arr)) {             foreach ($this->arr as $id => $a) {                 if ($a['pid'] == $myid) {                     $newarr[$id] = $a;                 }             }         }         return $newarr ? $newarr : false;     }     //获取带格式数组     public function getArray($myid = 0, $sid = 0, $adds = '')     {         $number = 1;         $child = $this->get_child($myid);         if (is_array($child)) {             $total = count($child);             foreach ($child as $a) {                 $j = $k = '';                 if ($number == $total) {                     $j .= $this->icon[2];                 } else {                     $j .= $this->icon[1];                     $k = $adds ? $this->icon[0] : '';                 }                 $spacer = $adds ? $adds . $j : '';                 $a['name'] = $spacer . ' ' . $a['name'];                 $this->ret[] = $a;                 $fd = $adds . $k . '   ';                 $this->getArray($a['id'], $sid, $fd);                 $number++;             }         }         return $this->ret;     }     //select     public function get_tree($myid, $str, $sid = 0, $adds = '')     {         $number = 1;         $child = $this->get_child($myid);         if (is_array($child)) {             $total = count($child);             foreach ($child as $a) {                 $id = $a['id'];                 $j = $k = '';                 if ($number == $total) {                     $j .= $this->icon [2];                 } else {                     $j .= $this->icon [1];                     $k = $adds ? $this->icon [0] : '';                 }                 $spacer = $adds ? $adds . $j : '';                 $select = $id == $sid ? 'selected' : '';                 $this->ret .= sprintf($str, $id, $select, $spacer, $a['name']);                 $this->get_tree($id, $str, $sid, $adds . $k . ' ');                 $number++;             }         }         return $this->ret;     }     //文件夹目录     public function read_all_dir($dir, $onlyDir = true, $ignore = [])     {         $result = array();         $handle = opendir($dir);         if ($handle) {             while (($file = readdir($handle)) !== false) {                 if (in_array($file, $ignore)) continue;                 if ($file != '.' && $file != '..') {                     $cur_path = $dir . DIRECTORY_SEPARATOR . $file;                     if (is_dir($cur_path)) {                         $result[$file] = $this->read_all_dir($cur_path, $onlyDir);                     } else {                         if (!$onlyDir) {                             $result[] = $file;                         }                     }                 }             }             closedir($handle);         }         return $result;     }     //数组转换     public function arrshift($array, $pid = 0)     {         static $r = [];         static $index = 1;         if (is_array($array) && count($array) > 0) {             foreach ($array as $k => $v) {                 $r[] = array(                     'id' => $index,                     'pid' => $pid,                     'name' => is_array($v) ? $k : $v                 );                 $index++;                 $this->arrshift($v, $index - 1);             }         }         return $r;     } }

使用示例

$tree = new Tree (); //文件夹遍历 $data = $tree->read_all_dir(realpath('../file_dir'), false, ['.git', '.idea', 'vendor']); //转换成[['id','pid','name']]的二维数组 $data = $tree->arrshift($data); $tree->set_tree($data);  $data = $tree->getArray(); foreach ($data as $value) {     echo $value['name'];     echo '<br/>';     echo '<br/>'; }

推荐教程:《PHP教程》

以上就是分享一个生成文件层级树类的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
标签: PHP
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:Linux下查看PHP配置文件php.ini的位置

相关资讯