Blog
It's a Wonderful Life
如何检索目录中的所有文件和子文件夹
这是一道经典的PHP面试题,解法有很多,暂贴出其中一种。
主要思路是利用opendir(string $dir)
, readdir(resource $handle)
等函数实现。
<?php
$arr = testRead();
echo "<pre>";
print_r($arr);
echo "</pre>";
function testRead($dir = '.')
{
$dirArr = [];
if (! is_dir($dir))
{
return $dirArr;
}
if (! $handle = opendir($dir))
{
return $dirArr;
}
while (($file = readdir($handle)) !== false)
{
if ($file != '.' && $file != '..')
{
$filename = $dir . '/' . $file;
if (is_dir($filename))
{
$dirArr["$filename"] = testRead($filename);
}
else
{
$dirArr[] = $filename;
}
}
}
closedir($handle);
return $dirArr;
}
值得注意的是,readdir
函数会默认在数组中加入两个元素:.
和..
,代表当前目录和上一级目录,在遍历过程中要注意排除这两个元素。
另外还可以利用glob()
函数解决这个问题,详细解法就不写了,大致思路和上述一致.