Создать дерево каталогов на основе массива карты - PullRequest
1 голос
/ 30 сентября 2019

Моя задача - создать дерево каталогов, в котором необходимо фильтровать некоторые файлы каталогов. Я думаю, что это хорошая идея - создать карту, в которой я могу указать для каждого каталога, применять ли фильтрацию.

protected $templatesMap = array(
    'config' => true,
    'html' => [
        'pages' => false,
        'header' => true,
        'index' => false,
        'main' => true,
        'product' => true,
        'reviews' => false,
    ],
    'html_mobile' => [
        'banner' => true,
        'pages' => false
    ]
);

Вот мой код:

protected function getDirectoriesTree()
{
    $templateTree = array();
    $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator('design/theme_dir_name/'), RecursiveIteratorIterator::CHILD_FIRST);
    /** @var RecursiveDirectoryIterator $fileInfo */
    foreach ($iterator as $fileInfo) {
        $path = $fileInfo->isDir() ? array($fileInfo->getFilename() => array()) : array($fileInfo->getFilename());
        for ($depth = $iterator->getDepth() - 1; $depth >= 0; $depth--) {
            $dirName = $iterator->getSubIterator($depth)->current()->getFilename();
            if (!in_array($dirName, ['.', '..'])) {
                /**
                 * 
                 * My problem is here! 
                 * I do not know, how to check that if file must be filtered or not, 
                 * based on $this->templatesMap.
                 * 
                 */
                $path = [$dirName => $path];
            }
        }
        $templateTree = array_merge_recursive($templateTree, $path);
    }
    return $templateTree;
}

Пожалуйста, помогитесделать проверку целевого элемента карты на каждой итерации. Или, если это плохая идея, каков альтернативный путь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...