Создание массива из структуры каталогов

Мне нужно итерации структуры каталогов и нажмите его в массив со специальной структурой. Итак, у меня есть следующая структура каталогов

<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; } ?>