PHP дерево из разделов и элементов в массив

Структура разделов и элементов приведена ниже на скрине:

Для построения дерева из разделов и элементов на сервере напишем небольшую рекурсивную функцию - то есть функцию, которая будет сканировать раздел(папку/категорию) и все вложенные в него подразделы разной глубины.

function getTree($path) {
    $res = [];
    $files = scandir($path);
    foreach ($files as $file) {
        if ($file == ".." || $file == ".") {
            continue;
        }

        $data = array("NAME" => $file);
		
        if (is_dir($path . "/" . $file)) {
            $child = getTree($path . "/" . $file);
            if (!empty($child)) {
                $res[] = array_merge(
                    $data,
                    ["CHILDREN" => $child]
                );
            } else {
                $res[] = $data;
            }
        } else {
            $res[] = $data;
        }
    }

    return $res;
}

$result = getTree($_SERVER["DOCUMENT_ROOT"]."/test/");
echo "<pre>";var_dump($result);echo "</pre>";

Логика работы функции следующая: она принимает один параметр - путь, который нужно просканировать. Когда функция получает его, она ищет(сканирует) в нем все файлы и разделы(категории).

После этого идёт перебор всех файлов и разделов, которые удалось найти. Если перебираемый элемент является разделом, то он сканируется и в результатирующий массив сохраняется массив с именем раздела и дочерними элементами, если они есть. Если перебираемый элемент является файлом, то сохраняется массив с именем файла.

Результат работы представлен ниже на скрине: