directory — Массив с каталогами и подкаталогами 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

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

Как я могу сделать это быстрее?

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

1

Решение

Попробуйте использовать 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

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector