PHP.SU

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


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

> Без описания
t3dev
Отправлено: 05 Марта, 2018 - 16:50:05
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Февр. 2018  


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




Люди добрые, помогите. Имею примерно такой список строк:

CODE (html):
скопировать код в буфер обмена
  1. <a href="">file1.jpg</a>
  2. <a href="">Folder1/file1.pdf</a>
  3. <a href="">Folder1/file2.pdf</a>
  4. <a href="">Folder1/Subfolder1/file3.pdf</a>
  5. <a href="">Folder2/text.txt</a>


Как мне его разобрать при помощи PHP, чтобы на выходе получить следющее. Т.е. разделителями папок должны быть слеши.

CODE (html):
скопировать код в буфер обмена
  1.  
  2. <a href="">file1.jpg</a>
  3. <div>
  4.  Folder1
  5.  <a href="">file1.pdf</a>
  6.  <a href="">file2.pdf</a>
  7.   <div>
  8.     Subfolder1
  9.     <a href="">file3.pdf</a>
  10.   </div>
  11. </div>
  12.  
  13. <div>
  14.   Folder2
  15.   <a href="">text.txt</a>
  16. </div>

(Отредактировано автором: 05 Марта, 2018 - 16:54:36)

 
 Top
andrewkard
Отправлено: 05 Марта, 2018 - 17:29:55
Post Id


Участник


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


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




Попахивает рекурсией, вот пример с перебором в лоб,
сначала обрабатываем:
PHP:
скопировать код в буфер обмена
  1.  
  2. $list = [
  3.     'file1.jpg',
  4.     'Folder1/file1.pdf',
  5.     'Folder1/file2.pdf',
  6.     'Folder1/Subfolder1/file3.pdf',
  7.     'Folder2/text.txt',
  8. ];
  9.  
  10. $data = [];
  11. foreach ($list as $str) {
  12.     if (strpos($str, '/') !== false) {
  13.         $parts = explode('/', $str);
  14.  
  15.         if (count($parts) == 2) {
  16.             $data[$parts[0]][] = $parts[1];
  17.         }
  18.  
  19.         if (count($parts) == 3) {
  20.             if (empty($data[$parts[0]][$parts[1]])) {
  21.                 $data[$parts[0]][$parts[1]] = [];
  22.             }
  23.  
  24.             $data[$parts[0]][$parts[1]][] = $parts[2];
  25.         }
  26.  
  27.     } else {
  28.         $data[] = $str;
  29.     }
  30. }
  31.  


потом вывод:

PHP:
скопировать код в буфер обмена
  1.  
  2. <html>
  3. <body>
  4.  
  5. <?PHP foreach ($data as $key => $row) { ?>
  6.  
  7.     <?PHP if (!is_array($row)) { ?>
  8.  
  9.         <a href="<?= $row ?>"><?= $row ?></a>
  10.  
  11.     <?PHP } else { ?>
  12.  
  13.         <div>
  14.             <?= $key ?>
  15.  
  16.             <?PHP foreach ($row as $_key => $_row) { ?>
  17.  
  18.                 <?PHP if (!is_array($_row)) { ?>
  19.  
  20.                     <a href="<?= $_row ?>"><?= $_row ?></a>
  21.  
  22.                 <?PHP } else { ?>
  23.  
  24.                     <div>
  25.                         <?= $_key ?>
  26.  
  27.                         <?PHP foreach ($_row as $__key => $__row) { ?>
  28.  
  29.                             <a href="<?= $__row ?>"><?= $__row ?></a>
  30.  
  31.                         <?PHP } ?>
  32.                     </div>
  33.                 <?PHP } ?>
  34.             <?PHP } ?>
  35.         </div>
  36.     <?PHP } ?>
  37. <?PHP } ?>
  38. </body>
  39. </html>
  40.  
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB