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>";
Логика работы функции следующая: она принимает один параметр - путь, который нужно просканировать. Когда функция получает его, она ищет(сканирует) в нем все файлы и разделы(категории).
После этого идёт перебор всех файлов и разделов, которые удалось найти. Если перебираемый элемент является разделом, то он сканируется и в результатирующий массив сохраняется массив с именем раздела и дочерними элементами, если они есть. Если перебираемый элемент является файлом, то сохраняется массив с именем файла.
Результат работы представлен ниже на скрине: