Список папок в виде иерархии

mxmod

Новичок
Здравствуйте, на чистом PHP могу вывести иерархический список папок с помощью рекурсии. То же самое нужно сделать с помощью AJAX. Как я понял один из вариантов, это сначала в php затолкать иерархический список в многомерный массив с учётом вложенности, а затем отправить его клиенту и там с помощью JS уже выводить список иерархии из массива. Дело в том, что я не знаю как можно затолкать список в многомерный массив. Или есть ещё какие-то другие способы? Помогите, пожалуйста, с решением проблемы.
PHP:
$arr=[];

function recursive($dir)

{
    $odir = opendir($dir);

    while ($file = readdir($odir)) {

    if ($file == '.' || $file == '..') {
        continue;
    }

    else {
        if (is_dir($dir.DIRECTORY_SEPARATOR.$file)){   
        echo "<li>";
        echo "<a href='".$dir.DIRECTORY_SEPARATOR.$file."'>".$file."</a>"; 
        }
      
    }

    if (is_dir($dir.DIRECTORY_SEPARATOR.$file)) {
        echo "<ol class='subdirectory'>";
        recursive($dir.DIRECTORY_SEPARATOR.$file);
        echo "</ol>";
        }
        echo "</li>";
    }
    closedir($odir);
}

recursive("Новая папка");
 

WMix

герр M:)ller
Партнер клуба
это самый оптимальный алгоритм, под себя сам подстроишь надеюсь
PHP:
function buildTree(array $dataset) {
    $tree = [];
    $references = [];
    foreach ($dataset as &$node) {
        $references[$node['id']] = &$node;
        $node['children'] = [];
        if (is_null($node['pid'])) {
            $tree = &$node;
        } else {
            $references[$node['pid']]['children'][] = &$node;
        }
    }
    return $tree;
}

print_r(buildTree([
    ['id' => 1, 'pid' => null, 'name' => 'root'],
    ['id' => 2, 'pid' => 1, 'name' => 'home'],
    ['id' => 3, 'pid' => 2, 'name' => 'wmix'],
    ['id' => 4, 'pid' => 1, 'name' => 'var'],
    ['id' => 5, 'pid' => 4, 'name' => 'www'],
]));
 
Последнее редактирование:
Сверху