包含目录和子目录的数组PHP速度慢

时间:2015-07-24 09:43:30

标签: php directory glob directory-structure

我创建了这个函数:

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。

我怎样才能更快地完成这项工作?

谢谢大家!!!

1 个答案:

答案 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