Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Директории( файлы) в ассоциативный массив. Подскажите -Please.

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Подскажите встроенный класс или библиотеку.
Vendor
Отправлено: 26 Июля, 2015 - 18:16:51
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Июль 2015  


Помог: 0 раз(а)




Задача следующая:
Есть директория (локальная) с большим количеством вложенных папок и фалов. Нужно сделать аналогичную структуру папок/файлов в Ecxel(для их последующей группировки) по средствам PHP (только PHP, VBA - хоть и легче но не подходит увы), т.е имеем как пример структуру на рис.1
результат как на рис.2

Решение было выбрано следующее:
1.
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.   function showTree($folder, $space) {
  3.     /* Получаем полный список файлов и каталогов внутри $folder */
  4.     $files = scandir($folder);
  5.     foreach($files as $file) {
  6.       /* Отбрасываем текущий и родительский каталог */
  7.       if (($file == '.') || ($file == '..')) continue;
  8.       $f0 = $folder.'/'.$file; //Получаем полный путь к файлу
  9.       /* Если это директория */
  10.       if (is_dir($f0)) {
  11.         /* Выводим, делая заданный отступ, название директории */
  12.         echo $space.$file."<br />";
  13.         /* С помощью рекурсии выводим содержимое полученной директории */
  14.         showTree($f0, $space.'&nbsp;&nbsp;&nbsp');
  15.       }
  16.       /* Если это файл, то просто выводим название файла */
  17.       else echo $space.$file."<br />";
  18.     }
  19.   }
  20.   /* Запускаем функцию для текущего каталога */
  21.   showTree("./", "");

2. Полученный асоц.массив с помощью библ. PHPEcxel привести в нужный вид на Листе.

Подскажите: Есть ли альтернативное решение обхода структуры файлов и запихнуть их имена в ac.массив так чтобы получилось следующее (может библиотеки какие - то):
[каталог1 => [папка, файл, [папка,файл,файл]], file1 => файл, и т.п]

3. Или более подходящий метод выполнения задачи в целом.
Спасибо.
Прикреплено изображение (Нажмите для увеличения)
13.png
 
 Top
Vendor
Отправлено: 26 Июля, 2015 - 18:18:09
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Июль 2015  


Помог: 0 раз(а)




2 рис
Прикреплено изображение (Нажмите для увеличения)
2.png
 
 Top
Deonis
Отправлено: 26 Июля, 2015 - 18:49:43
Post Id



Посетитель


Покинул форум
Сообщений всего: 298
Дата рег-ции: Нояб. 2009  


Помог: 14 раз(а)




Vendor пишет:
Есть ли альтернативное решение обхода структуры файлов
Я использую итераторы:
PHP:
скопировать код в буфер обмена
  1. function makeTree( DirectoryIterator $dir ){
  2.         $data = array();
  3.         foreach ( $dir as $node ){
  4.                 if ( $node->isDir() && !$node->isDot() ){
  5.                         $data[$node->getFilename()] = makeTree( new DirectoryIterator( $node->getPathname() ) );
  6.     } else if ( $node->isFile() ) {
  7.                         $data[] = $node->getFilename();
  8.                 }
  9.         }
  10.   return $data;
  11. }
  12.  
  13. $fileData = makeTree( new DirectoryIterator( '.' ) );
  14.  
  15. print_r($fileData);
 
 Top
Vendor
Отправлено: 26 Июля, 2015 - 19:28:21
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Июль 2015  


Помог: 0 раз(а)




Спасибо за помощь <Deonis>. Буду использовать, как альтернативу.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с файловой системой и файлами »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB