Все ленты — последние статьи

*Скрипт построения иерархического дерева

В данной теме мы рассмотрим скрипт для построения иерархического дерева. Данный скрипт будет основан на методе использования рекурсивной функции. Ниже приведен пример иерархического дерева.
  • Уровень 1
    • Подуровень 1.1
    • Подуровень 1.2
    • Подуровень 1.3
  • Уровень 2
    • Подуровень 2.1
    • Подуровень 2.2
  • Уровень 3
    • Подуровень 3.1
      • Подуровень 3.1.1
      • Подуровень 3.1.2
    • Подуровень 3.2
      • Подуровень 3.1.1
      • Подуровень 3.1.2

Предположим, все наши данные хранятся в массиве вида:

PHP код:
 
<?php
Array = array(
    array(
'text' => 'Уровень 1', 'id' => 1, 'parent_id' => 0),
    array(
'text' => 'Подуровень 1.1', 'id' => 2, 'parent_id' => 1),
    array(
'text' => 'Подуровень 1.2', 'id' => 3, 'parent_id' => 1),
    array(
'text' => 'Подуровень 1.3', 'id' => 4, 'parent_id' => 1),
    array(
'text' => 'Уровень 2', 'id' => 5, 'parent_id' => 0),
    array(
'text' => 'Подуровень 2.1', 'id' => 6, 'parent_id' => 5),
    array(
'text' => 'Подуровень 2.2', 'id' => 7, 'parent_id' => 5),
    array(
'text' => 'Уровень 3', 'id' => 8, 'parent_id' => 0),
    array(
'text' => 'Подуровень 3.1', 'id' => 9, 'parent_id' => 8),
    array(
'text' => 'Подуровень 3.1.1', 'id' => 10, 'parent_id' => 9),
    array(
'text' => 'Подуровень 3.1.2', 'id' => 11, 'parent_id' => 9),
    array(
'text' => 'Подуровень 3.2', 'id' => 9, 'parent_id' => 8),
);
?>

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

PHP код:
 
<?php
function get_tree($tree, $parent_id) {
$html = '';
 foreach (
$tree as $row) {
    if (
$row['parent_id'] == $parent_id) {
        
$html .= '<li>' . "\n";
        
$html .= '    ' . $row['text'] . "\n";
        
$html .= '    ' . get_tree($tree, $row['id']);
        
$html .= '</li>' . "\n";
    }
 }
return 
$html ? '<ul>' . $html . '</ul>' . "\n" : '';
}
?>

Теперь для вывода иерархического дерева используйте echo get_tree($tree, 0);


Как видите, ничего сложного в построение иерархического дерева нет, главное правильно записать в массив идентификаторы родителей для каждого элемента (0 для корневых элементов).