Имеется БД PostgreSQL.
Результатом довольно хитрого запроса из неё делается выборка, в результате получается примерно такая таблица:

Сам запрос:
$res = pg_query ("SELECT DISTINCT struc_usl.id_usl, u.naz AS naz_u, u.nom AS nom_u, u.gr_id as id_gr_u, g.idp AS korn_g_id, g.naz AS naz_g, g.npp, p.naz AS korn_g_naz, b.naz AS naz_b FROM isp.struc_usl
LEFT JOIN (SELECT * FROM uslugi.usl_sp) AS u ON struc_usl.id_usl = u.id
LEFT JOIN (SELECT * FROM uslugi.grusl) AS g ON u.gr_id = g.id
LEFT JOIN (SELECT * FROM uslugi.grusl) AS p ON p.id = g.idp
LEFT JOIN (SELECT * FROM uslugi.doc_blanks WHERE doc_blanks.naz = 'Регламент' AND doc_blanks.docblank is not null) AS b ON u.id = b.id_usl
WHERE u.gr_id !=121 AND u.gr_id !=158 AND u.gr_id !=169
ORDER BY npp, nom_u");
$arr = pg_fetch_all ($res);
id_usl - id услуги;
naz_u - название услуги;
nom_u - краткий код услуги;
id_gr_u - id группы услуг;
korn_g_id - id корневой группы услуг (если null значит корневой для этой услуги является группа id_gr_u);
naz_g - имя группы услуг;
korn_g_naz - имя корневой группы услуг;
naz_b, npp - в данной задаче не потребуются.
Необходимо построить дерево, чтобы, исходя из таблицы в примере, получилось примерно следующее:
Группа услуг 1
УСЛ-01 Услуга 01
УСЛ-02 Услуга 02
УСЛ-03 Услуга 03
УСЛ-04 Услуга 04
Группа услуг 2
Группа услуг 3
УСЛ-05 Услуга 05
УСЛ-06 Услуга 06
УСЛ-07 Услуга 07
Группа услуг 4
УСЛ-08 Услуга 08
УСЛ-09 Услуга 09
УСЛ-10 Услуга 10
В разборе массивов не силён, да и вообще сам не программист. А сделать надо... Прошу помощи в написании нужного кода.