递归遍历文件夹得到所有的目录及文件是很多面试题都会考的,所以总结一下。
我的目录结构如下
遍历的代码如下
/**
* 遍历文件夹
* @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);
}
输出结果
如果你只是想得到所有的目录及文件而不是输出,可以使用下边的代码
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;
}
最终得到的结果如下