2015-07-24 5 views
1

Я создал эту функцию:Массив каталогов и подкаталогов PHP замедленном

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 

Порядок не важен. Массив не будет содержать файлы. Только дир.

Как это сделать быстрее?

Спасибо вам всем !!!

ответ

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

+0

Спасибо !!! Моя страница создается мгновенно !!! –

+0

Добро пожаловать! –