php文件夹遍历的几种方法

函数

function dirTree()
{
    if(!is_dir($path)) return [];
        $files = [];
        $dir = opendir($path);
        while($file = readdir($dir)) {
            if($file == '.' || $file == '..') continue;
            $new_path = trim($path, '/').'/'.trim($file, '/');
            $files[] = $new_path;
            if(is_dir($new_path)){
                $files = array_merge($files, $this->ergodicDir2($new_path));
            }
        }
        closedir($dir);
        return $files;
}

Directory类

function dirTree()
{
    if(!is_dir($path)) return [];
        $files = [];
        $dir_h = dir($path);
        while($file = $dir_h->read()){
            if($file == '.' || $file == '..') continue;
            $new_path = trim($path, '/').'/'.trim($file, '/');
            $files[] = $new_path;
            if(is_dir($new_path)){
                $files = array_merge($files, $this->ergodicDir3($new_path));
            }
        }
        $dir_h->close();
        return $files;
}

迭代器

function dirTree()
{
    if(!is_dir($path)) return [];
    $files = [];
        $dir = new \DirectoryIterator($path);
        foreach ($dir as $key => $file){
            if($file->getFilename() == '.' || $file->getFilename() == '..'){
                continue;
            }
            $files[] = $file->getPathname();
            if($file->isDir()){
                $files = array_merge($files, $this->ergodicDir5($file->getPathname()));
            }
        }
        return $files;
}
function dirTree()
{
    $files = array();
        /**@var \SplFileInfo $file*/
        foreach(new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($path)) as $file) {
            $filename = $file->getFilename();
            if($filename == '.' || $filename == '..') continue;
            $type = ($file->isDir()) ? '/' : '';
            $files[] = $file->getPathname() . $type;
        }
        return array_unique($files);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值