Blog

It's a Wonderful Life

如何检索目录中的所有文件和子文件夹

2017-02-28 13:43 Posted in Learn with PHP

这是一道经典的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() 函数解决这个问题,详细解法就不写了,大致思路和上述一致.