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

saonian 发布于 02-27 21:10 540 点击
递归遍历文件夹得到所有的目录及文件是很多面试题都会考的,所以总结一下。 我的目录结构如下 ![alt text](https://www.shiqidu.com/upload/discussion/20190227/e96a41b976d787339c1af2dc8376b8d2_origin.png) 遍历的代码如下 ```php /** * 遍历文件夹 * @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](https://www.shiqidu.com/upload/discussion/20190227/7c7cbaa28b149baef4ed9f6fd959e6eb_origin.png) 如果你只是想得到所有的目录及文件而不是输出,可以使用下边的代码 ```php 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](https://www.shiqidu.com/upload/discussion/20190227/67cf7e7f427efcc67a0e5ba90b7e3b89_origin.png)
0 评论

请登录后发表评论

saonian

all or nothing, now or never.

文章
回复
粉丝