PHP递归遍历文件夹同时输出目录结构

19-02-27 21:10 字数 759 阅读 2779

递归遍历文件夹得到所有的目录及文件是很多面试题都会考的,所以总结一下。

我的目录结构如下

alt text

遍历的代码如下

/**
 * 遍历文件夹
 * @param $dir
 * @param int $level
 */
function loopDir($dir)
{
    static $level = 0;
    $handle = opendir($dir);
    while (false !== ($file = readdir($handle))) {
        if ($file != '.' && $file != '..') {
            $str = "|";
            for ($i = 0; $i < $level; $i++) {
                $str .= "++";
            }
            echo "====== LEVEL " . $level . " ======    ";
            echo $str . $file . "\n";

            if (is_dir($dir . DIRECTORY_SEPARATOR . $file)) {
                ++$level;
                loopDir($dir . DIRECTORY_SEPARATOR . $file);
            }
        }
    }
    $level--;
    closedir($handle);
}

输出结果

alt text

如果你只是想得到所有的目录及文件而不是输出,可以使用下边的代码

function loopDir2($dir)
{
    $fileArray = [];
    $files = scandir($dir);
    if (false !== $files) {
        foreach ($files as $file) {
            if ($file != '.' && $file != '..') {
                if (is_dir($dir . DIRECTORY_SEPARATOR . $file)) {
                    $fileArray[$file] = loopDir2($dir . DIRECTORY_SEPARATOR . $file);
                } else {
                    $fileArray[] = $file;
                }
            }
        }
    }
    return $fileArray;
}

最终得到的结果如下

alt text

0人点赞>
关注 收藏 改进 举报
0 条评论
排序方式 时间 投票
快来抢占一楼吧
请登录后发表评论
站长 @ 十七度
文章
384
粉丝
23
喜欢
195
收藏
31
排名 : 1
访问 : 147.28万
私信