А что вас смущает? Вы не можете плоский массив превратить в дерево?
Или уже полученное дерево вывести на экран?
В первом случае за первый прогон создаете (далее псевдокод)
map[0] = {...im root.., children:[]}
for current in alldblines
map[current.id] = {блабла бла, children:[] }
за второй прогон
for current in alldblines
map[current.parent_id].children.push(current)
с момента как дерево получено - пробежитесь по нему просто рекурсивной функций начиная с map[0].children для вывода используя например ul li теги
тут для первой части готовый пример на php
stackoverflow.com/questions/7767961/converting-an-...