@denislysenko
data engineer

Как написать скрипт на PHP, который выводит дерево с отступами?

Написать скрипт, который бы выводил "дерево" с отступами, чтобы было видно где родительский, а где дочерний элемент.
Ветви дерева хранятся в БД (mysql). Таблица обычно содержит 3 поля: id, name и parent_id. Учесть возможность построение такого дерева неограниченной вложенности.

Примеры таких деревьев:
- структура каталогов на жестком диске;
- список категорий товаров.

Как это сделать? По PHP знаю базовые вещи. Может кто нибудь разъяснить на пальцах, как это сделать, что изучить, где загуглить?
  • Вопрос задан
  • 442 просмотра
Решения вопроса 1
@Nc_Soft
Писал в 2014 году, через рекурсию
<?php
// это наш массив из базы, но для примера задаю данные в пхп массиве
$data = array(
    array('id' => 1, 'pid' => 0, 'name' => '1'),
    array('id' => 2, 'pid' => 1, 'name' => '1.1'),
    array('id' => 3, 'pid' => 2, 'name' => '1.1.1'),
    array('id' => 4, 'pid' => 0, 'name' => '2'),
    array('id' => 5, 'pid' => 0, 'name' => '3'),
    array('id' => 6, 'pid' => 5, 'name' => '3.1'),
    array('id' => 7, 'pid' => 5, 'name' => '3.2'),
);

//теперь создаем массив в виде дерева
$tree = array();
foreach ($data as $row) {
    $tree[(int) $row['pid']][] = $row;
}

//ну и рекурсивная функция для вывода дерева
function treePrint($tree, $pid=0) {
    if (empty($tree[$pid]))
        return;
    echo '<ul>';
    foreach ($tree[$pid] as $k => $row) {
        echo '<li>';
        echo $row['name'];
        if (isset($tree[$row['id']]))
            treePrint($tree, $row['id']);
        echo '</li>';
    }
    echo '</ul>';
}

//вызов функции
treePrint($tree);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы