首页后端开发PHP分享一个生成文件层级树类

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

时间2024-02-02 05:03:02发布访客分类PHP浏览397
导读:收集整理的这篇文章主要介绍了分享一个生成文件层级树类,觉得挺不错的,现在分享给大家,也给大家做个参考。根据 php 递归读取文件夹生成文件树class Tree{ public $arr = array( ; public $i...
收集整理的这篇文章主要介绍了分享一个生成文件层级树类,觉得挺不错的,现在分享给大家,也给大家做个参考。

根据 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 . '&
    nbsp;
    &
    nbsp;
    &
    nbsp;
    ';
                    $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 . '&
    nbsp;
    ');
                    $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教程》

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

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: 分享一个生成文件层级树类
本文地址: https://pptw.com/jishu/596395.html
PHP之Category类库 无限分类 详解PHP中self关键字

游客 回复需填写必要信息