我创建了这个函数:
function expandDirectories2($base_dir) {
$directories = array();
$folders = glob($base_dir."*", GLOB_ONLYDIR);
foreach($folders as $file) {
if($file == '.' || $file == '..') continue;
$dir = $file;
if(is_dir($dir)) {
$directories []= $dir;
$directories = array_merge($directories, expandDirectories2($dir));
}
}
return $directories;
}
print_r(expandDirectories2("./"));
此函数读取指定文件夹的所有目录和子目录。问题是加载页面需要花费很多时间,有时会显示memory_exhausted
错误。
我只想创建一个包含文件夹目录和子目录的数组。我不想成为等级制,而且排序并不重要。
实施例: 这是文件夹结构:
- PARENT FOLDER:
- 2014
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 2015
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
然后数组应该是:
./2014
./2014/01
./2014/02
./2014/03
./2014/04
./2014/05
./2014/06
./2014/07
./2014/08
./2014/09
./2014/10
./2014/11
./2014/12
./2015
./2015/01
./2015/02
./2015/03
./2015/04
./2015/05
./2015/06
./2015/07
./2015/08
./2015/09
./2015/10
./2015/11
./2015/12
排序并不重要。该数组不包含文件。只有dirs。
我怎样才能更快地完成这项工作?
谢谢大家!!!
答案 0 :(得分:0)
尝试使用DirectoryIterator
。它应该快得多。
function expandDirectories2($path) {
$directories = array();
$dir = new DirectoryIterator($path);
foreach ($dir as $fileinfo) {
if ($fileinfo->isDir() && !$fileinfo->isDot()) {
$directories[]= $fileinfo->getPathname();
$directories = array_merge($directories, expandDirectories2($fileinfo->getPathname()));
}
}
return $directories;
}
点击此处查看更多信息:http://php.net/manual/en/class.directoryiterator.php