Пример функции, которая выводит список смежности в виде вложенных ul/li:
/**
* Возвращает html код дерева
* @param array $tree - массив в формате array(array('name' => .., 'id' => .., 'pid' => ..), array(..))
* @param integer $pid - id родителя
*/
function get_tree($tree, $pid)
{
$html = '';
foreach ($tree as $row)
{
if ($row['pid'] == $pid)
{
$html .= '<li>' . "\n";
$html .= ' ' . $row['name'] . "\n";
$html .= ' ' . get_tree($tree, $row['id']);
$html .= '</li>' . "\n";
}
}
return $html ? '<ul>' . $html . '</ul>' . "\n" : '';
}
Использование:
$tree = array(
array('name' => 'Уровень 1', 'id' => 1, 'pid' => 0),
array('name' => 'Уровень 1.1', 'id' => 2, 'pid' => 1),
array('name' => 'Уровень 1.2', 'id' => 3, 'pid' => 1),
array('name' => 'Уровень 1.3', 'id' => 4, 'pid' => 1),
array('name' => 'Уровень 2', 'id' => 5, 'pid' => 0),
array('name' => 'Уровень 2.1', 'id' => 6, 'pid' => 5),
array('name' => 'Уровень 2.2', 'id' => 7, 'pid' => 5),
array('name' => 'Уровень 3', 'id' => 8, 'pid' => 0),
array('name' => 'Уровень 3.1', 'id' => 9, 'pid' => 8),
array('name' => 'Уровень 3.1.1', 'id' => 10, 'pid' => 9),
array('name' => 'Уровень 3.1.2', 'id' => 11, 'pid' => 9),
);
echo get_tree($tree, 0);
Комментарии
Спосибо, с такой проблемой встречался и буду встречатся, для вывода словаря очень нужно
Спасибо! Использую для динамической навигации по разделам сайта.
Не очень понимаю зачем это нужно? Если у вас статические страницы, можна использовать систему меню, если динамические views. Буду благодарна за пояснение.
Прошу прощения - не увидела что вышеуказанная статья актуальна для PHP, а не для Drupal.
Возможно ли таким способом вывести комментарии в древовидной структуре?
таким образом можно вывести любой список смежности, а что реализуется с помощью него не важно
Спасибо, а то всюду реализовано в не менее чем 80 строк кода
есть существенный минус в этом, в коде выбрасываются пустые теги
, можно поступить практичнее.. проверять вызывается функция в пустую или нет
спасибо, добавил в код
Как прикрутить к семерке если взять вместо массива $tree запрос из бд на обход всех записей из таблицы , где выводится name&
обойти результат запроса, собрать $tree, передать в функцию
Спасибо большое. От себя добавлю, что можно прикрутить в конце каждого использованного элемента unset(), чтобы сократить число последующих итераций.
подскажите а как такое зделать в форме select ? если можно примером
Добавить комментарий