За последние 24 часа нас посетили 16995 программистов и 1300 роботов. Сейчас ищут 1459 программистов ...

Вывод дерева услуг с подгруппами

Тема в разделе "Сделайте за меня", создана пользователем Tracktor, 8 июн 2016.

  1. Tracktor

    Tracktor Новичок

    С нами с:
    8 июн 2016
    Сообщения:
    2
    Симпатии:
    0
    Здравствуйте.

    Имеется БД PostgreSQL.
    Результатом довольно хитрого запроса из неё делается выборка, в результате получается примерно такая таблица:
    [​IMG]
    Сам запрос:
    PHP:
    1. $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
    2. LEFT JOIN (SELECT * FROM uslugi.usl_sp) AS u ON struc_usl.id_usl = u.id
    3. LEFT JOIN (SELECT * FROM uslugi.grusl) AS g ON u.gr_id = g.id
    4. LEFT JOIN (SELECT * FROM uslugi.grusl) AS p ON p.id = g.idp
    5. 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
    6. WHERE u.gr_id !=121 AND u.gr_id !=158 AND u.gr_id !=169
    7. ORDER BY npp, nom_u");              
    8. $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 - в данной задаче не потребуются.

    Необходимо построить дерево, чтобы, исходя из таблицы в примере, получилось примерно следующее:

    HTML:
    1. Группа услуг 1
    2.    УСЛ-01 Услуга 01
    3.    УСЛ-02 Услуга 02
    4.    УСЛ-03 Услуга 03
    5.    УСЛ-04 Услуга 04
    6. Группа услуг 2
    7.    Группа услуг 3
    8.        УСЛ-05 Услуга 05
    9.        УСЛ-06 Услуга 06
    10.        УСЛ-07 Услуга 07
    11. Группа услуг 4
    12.    УСЛ-08 Услуга 08
    13.    УСЛ-09 Услуга 09
    14.    УСЛ-10 Услуга 10
    В разборе массивов не силён, да и вообще сам не программист. А сделать надо... Прошу помощи в написании нужного кода.
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    сделай var_export($array); результат выложи сюда, больше шансов на помощь.
     
  3. Tracktor

    Tracktor Новичок

    С нами с:
    8 июн 2016
    Сообщения:
    2
    Симпатии:
    0
    Результат весьма объёмен... выкладываю файлом.
     

    Вложения:

    • var_export.txt
      Размер файла:
      204,8 КБ
      Просмотров:
      5
  4. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Не знаю если правильно работает, но вот на скорую руку
    PHP:
    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4.     <title></title>
    5.     <style type="text/css">ul, li {list-style-type: none; }</style>
    6. </head>
    7. <body>
    8. <?php
    9. $arr = include 'var_export.txt';
    10. $result = array();
    11.  
    12. foreach ($arr as $row) {
    13.     $title = $row['nom_u'].' '.$row['naz_u'];
    14.     if(empty($row['korn_g_naz'])) {
    15.         $result[trim($row['naz_g'])]['list'][] = $title;
    16.     } else {
    17.         $result[trim($row['naz_g'])]['sub'][trim($row['korn_g_naz'])]['list'][] = $title;
    18.     }
    19. }
    20.  
    21. echo "<ul>";
    22. foreach ($result as $key0 => $value0) {
    23.     echo "<li>".$key0."</li>";
    24.     if (isset($value0['list'])) {
    25.         echo "<li><ul>";
    26.         foreach ($value0['list'] as $key1 => $value1) {
    27.         echo "<li>".$value1."<li>";
    28.         }
    29.         echo "</ul></li>";
    30.     }
    31.     if (isset($value0['sub'])) {
    32.         echo "<li><ul>";
    33.         foreach ($value0['sub'] as $key2 => $value2) {
    34.             if (is_array($value2['list'])) {
    35.                 echo "<li>".$key2."</li>";
    36.                 echo "<li><ul>";
    37.                 foreach ($value2['list'] as $key3 => $value3) {
    38.                     echo "<li>".$value3."</li>";
    39.                 }
    40.                 echo "</ul></li>";
    41.             }
    42.         }
    43.         echo "</ul></li>";
    44.     }
    45. }
    46. echo "</ul>";
    47. ?>
    48. </body>
    49. </html>
    Во славу ЦИКЛАМ!!!
    скачанные файлы.png