Мне нужно итерации структуры каталогов и нажмите его в массив со специальной структурой. Итак, у меня есть следующая структура каталогов
<pre> collection | | ---buildings | | | | | ---greece | | | | | | | | ---1.php | | ---2.php | | | | | ---rome | | | | | ---1.php | ---3.php | | ---trees | | ---evergreen | | | | | ---1.php | ---2.php | | ---leaves | | ---1.php ---2.php </pre>
Поэтому нужно «разобрать» его и подготовить данные в следующем формате:
array('collection' => array('category' => 'buildings', 'subcategory' => 'greece', 'type' => 1), array('category' => 'buildings', 'subcategory' => 'greece', 'type' => 2)), array('category' => 'buildings', 'subcategory' => 'rome', 'type' => 1), array('category' => 'buildings', 'subcategory' => 'rome', 'type' => 1), array('category' => 'buildings', 'subcategory' => 'rome', 'type' => 3), array('category' => 'trees', 'subcategory' => 'evergreen', 'type' => 1), array('category' => 'trees', 'subcategory' => 'evergreen', 'type' => 2), array('category' => 'trees', 'subcategory' => 'leaves', 'type' => 1), array('category' => 'trees', 'subcategory' => 'leaves', 'type' => 2) ),
Я думаю, что реализовать его с помощью RecursiveDirectoryIterator. Поэтому я передал «путь» в качестве параметра в RecursiveDirectoryIterator. Затем я передал этот новый объект ReursiveIteratorIterator. После этого я использовал оператор foreach для его итерации. Поэтому я создаю следующий код:
$path = __DIR__ . '/collection/'; $dir = new RecursiveDirectoryIterator($path); $files = new RecursiveIteratorIterator($dir, RecursiveIteratorIterator::SELF_FIRST); foreach ($files as $file) { if ($file->isDir()) { if (0 === $files->getDepth()) { $objects['category'] = $file->getBasename(); } if (1 === $files->getDepth()) { $objects['subcategory'] = $file->getBasename(); } } if ($file->isFile()) { $objects['fileName'] = $file->getBasename('.php'); continue; } }
Я ожидал получить массивы необходимых данных. Но этот код дает мне только:
array('category' => 'buildings', 'subcategory' => 'greece', 'fileName' => '1' )
Пожалуйста, помогите мне достичь моей цели в этой задаче! Спасибо!
Обычно я использую эту функцию для создания структуры папок
<pre> <?php function dirToArray($dir) { $contents = array(); foreach (scandir($dir) as $node) { if ($node == '.' || $node == '..') continue; if (is_dir($dir . '/' . $node)) { $contents[$node] = dirToArray($dir . '/' . $node); } else { $contents[] = $node; } } return $contents; } $startpath = "path"; $r = dirToArray($startpath); print_r($r); ?> </pre>
Я также использую код ниже, чтобы получить структуру папок
<?php $path = 'C:\assets';//absolute path $path_array = getPathArr($path); echo "<pre>"; print_r($path_array); echo "</pre>"; function getPathArr($path) { $folders = scandir($path); $new = array(); foreach ($folders as $folder) { if (!in_array($folder,['.','..'])) { if (is_dir("$path/$folder")) { $new[] = [$folder => getPathArr("$path/$folder")]; } else { $new[] = $folder; } } } return $new; } ?>