Создание и вывод древовидных структур на PHP

Древовидные структуры встречаются в повседневной жизни довольно часто. Это различные списки категорий, комментарии, разделы каталогов.
При не очень большом объеме выводимых элементов организовать их иерархический вывод проще всего на php.
Для этого нам потребуется вот такая структура
id | pid | name

id - это ид текущего элемента
pid - это ид родительского элемента (для элемента первого уровня это значение примем 0)
name - это имя элемента

Фактически, это структура таблицы в базе данных.
Получить массив данных из базы очень просто
SELECT * FROM table ORDER BY pid, id

Теперь сам скрипт вывода
// это наш массив из базы, но для примера задаю данные в пхп массиве
$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);


Результат должен быть таким
11.11.1.1 2 3 3.1 3.2