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
Форумы портала PHP.SU :: Версия для печати :: Разобрать список строк.
Форумы портала PHP.SU » PHP » Напишите за меня, пожалуйста » Разобрать список строк.

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

1. t3dev - 05 Марта, 2018 - 16:50:05 - перейти к сообщению
Люди добрые, помогите. Имею примерно такой список строк:

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>
2. andrewkard - 05 Марта, 2018 - 17:29:55 - перейти к сообщению
Попахивает рекурсией, вот пример с перебором в лоб,
сначала обрабатываем:
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.  

 

Powered by ExBB FM 1.0 RC1