Таблица в базе данных
+--+-------------+--------+
|id|name |parentid|
+--+-------------+--------+
|1 |Имя раздела 1|0 |
|2 |Имя раздела 2|0 |
|3 |Имя раздела 3|1 |
|4 |Имя раздела 4|2 |
|5 |Имя раздела 5|4 |
|6 |Имя раздела 6|2 |
+--+-------------+--------+
Массив, полученный после выборки из базы
$arr = array(
array(
'id' => '1',
'name' => 'Имя раздела 1',
'parentid' => '0'
),
array(
'id' => '2',
'name' => 'Имя раздела 2',
'parentid' => '0'
),
array(
'id' => '3',
'name' => 'Имя раздела 3',
'parentid' => '1'
),
array(
'id' => '4',
'name' => 'Имя раздела 4',
'parentid' => '2'
),
array(
'id' => '5',
'name' => 'Имя раздела 5',
'parentid' => '4'
),
array(
'id' => '6',
'name' => 'Имя раздела 6',
'parentid' => '2'
),
);
Функция построения дерева
<?php
function form_tree($mess)
{
if (!is_array($mess)) {
return false;
}
$tree = array();
foreach ($mess as $value) {
$tree[$value['parentid']][] = $value;
}
return $tree;
}
//$parent_id - какой parentid считать корневым
//по умолчанию 0 (корень)
function build_tree($cats, $parent_id)
{
if (is_array($cats) && isset($cats[$parent_id])) {
$tree = '<ul>';
foreach ($cats[$parent_id] as $cat) {
$tree .= '<li>' . $cat['name'];
$tree .= build_tree($cats, $cat['id']);
$tree .= '</li>';
}
$tree .= '</ul>';
} else {
return false;
}
return $tree;
}