Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
23 / 23 / 0
Регистрация: 09.11.2014
Сообщений: 72
1

Как вывести таблицу в виде иерархии?

04.07.2016, 17:31. Показов 1304. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
есть база
|id|url|category|
-------------------
0|rrr|no|
1|test|no|
2|blabla|test|
3|mr|test|
4|ml|blabla|

Как можно вывести в виде иерархии ? пример для этой таблицы. (no - нет категории)

HTML5
1
2
3
4
5
6
7
8
9
10
11
<ul>
 <li>0 - rrr</li>
 <li>1 - test</li>
   <ul>
    <li>2 - blabla</li>
        <ul>
            <li>4 - ml</li>
        </ul>
    <li>3 - mr</li>
   </ul>
</ul>
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.07.2016, 17:31
Ответы с готовыми решениями:

Как вывести из базы данные в таблицу в виде зебры(см.фото)
Здравствуйте,помогите сделать так,что бы из данные из базы выводились в таблицу в виде зебры,что бы...

Вывести таблицу из CSV файла в виде HTML таблицы
Всем привет. Помогите разобраться пожалуйста. Надо вывести таблицу из CSV файла в виде HTML...

Как наглядно представить код в виде иерархии классов и связей между ними
Желательно видеть как внутренние связи, между всеми методами, в том числе и обращения к переменным,...

Вывести на монитор таблицу в виде(паскаль)
1 2 1 3 2 1 4 3 2 1 5 4 3 2 1 помогите!очень срочно надо!

4
209 / 191 / 49
Регистрация: 15.03.2016
Сообщений: 1,227
04.07.2016, 18:56 2
рекурсивной ф-ей со вставкой <ul><li></li></ul>
0
шКодер самоучка
2282 / 1958 / 945
Регистрация: 09.10.2013
Сообщений: 4,388
Записей в блоге: 3
04.07.2016, 19:04 3
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
<?php
/**
 * @file https://gist.github.com/max-dark/f39028cc106ed32e8ce1b55a11643b43
 */
 
define('ROOT_NODE', null);
define('LINK', 'id');
define('NODE_TITLE', 'title');
define('PARENT_LINK', 'parent_id');
define('CHILD_NODES', 'child');
 
/**
 * восстанавливает дерево по таблице связей
 * @param array $data
 * @return array
 */
function restore_tree($data)
{
    $lst = prepare_parents($data);
 
    restore_tree_impl($lst[ROOT_NODE], $lst);
    return $lst[ROOT_NODE];
}
 
/**
 * восстановление связей родитель->дети
 * @param array $parent
 * @param array $data
 * @return void
 */
function restore_tree_impl(&$parent, &$data) {
    foreach ($parent[CHILD_NODES] as &$child) {
        // Если текущий ребенок сам является родителем
        if (array_key_exists($child['id'], $data)) {
            // восстановить связь
            $child[CHILD_NODES] = $data[$child['id']][CHILD_NODES];
            // проверить детей
            restore_tree_impl($child, $data);
        } else {
            $child[CHILD_NODES] = [];
        }
    }
}
function make($id) {
    return ['id' => $id, NODE_TITLE => '[root]', CHILD_NODES => []];
}
/**
 * Создает список узлов, имеющих датей
 * @param array $data
 * @return array
 */
function prepare_parents($data) {
    $res = [];
    foreach ($data as $item) {
        $parent = $item[PARENT_LINK];
        if (!array_key_exists($parent, $res)) {
            $res[$parent] = make($parent);
            if (array_key_exists($parent, $data)) {
                $res[$parent][NODE_TITLE] = $data[$parent][NODE_TITLE];
            }
        }
        unset($item[PARENT_LINK]);
        array_push($res[$parent][CHILD_NODES], $item);
    }
    return $res;
}
 
function show($item, $level) {
    if ($item['id'] === ROOT_NODE) return;
    while ($level --> 0) {
        echo '..';
    }
    echo $item[NODE_TITLE].PHP_EOL;
}
 
function print_tree($data, $level = -1) {
    show($data, $level);
    foreach ($data[CHILD_NODES] as $item) {
        print_tree($item, $level + 1);
    }
}
 
/*
$data = [
    ['id'=>0, NODE_TITLE=>'Электроника', PARENT_LINK => null],
    ['id'=>1, NODE_TITLE=>'Компьютеры', PARENT_LINK => 0],
    ['id'=>2, NODE_TITLE=>'ПК', PARENT_LINK => 1],
    ['id'=>3, NODE_TITLE=>'Ноутбуки', PARENT_LINK => 1],
    ['id'=>4, NODE_TITLE=>'Мобильные телефоны', PARENT_LINK => 0],
    ['id'=>5, NODE_TITLE=>'Бытовая химия', PARENT_LINK => null],
    ['id'=>6, NODE_TITLE=>'Порошок', PARENT_LINK => 5],
    ['id'=>7, NODE_TITLE=>'Мыло', PARENT_LINK => 5],
    ['id'=>8, NODE_TITLE=>'Трансформеры', PARENT_LINK => 3],
];
*/
 
$data = [
    ['id' => 0, 'url' => 'rrr',    'category' => 'no'],
    ['id' => 1, 'url' => 'test',   'category' => 'no'],
    ['id' => 2, 'url' => 'blabla', 'category' => 'test'],
    ['id' => 3, 'url' => 'mr',     'category' => 'test'],
    ['id' => 4, 'url' => 'ml',     'category' => 'blabla']
];
 
$links = get_links($data);
 
// преобразование элемента в подходящую структуру
function convert($item) {
    global $links;
    return [
        'id'        => $item['id'],
        NODE_TITLE  => $item['url'],
        PARENT_LINK => $links[$item['category']]
    ];
}
 
// получение ссылок на родителей
function get_links($data) {
    $tmp = array_flip(
        array_map(
            function ($item) { return $item['url']; },
            $data
        )
    );
    $tmp['no'] = ROOT_NODE;
    return $tmp;
}
 
$root = restore_tree(
    array_map('convert', $data)
);
 
print_tree($root);
2
Hello Kitty
690 / 562 / 402
Регистрация: 12.02.2016
Сообщений: 1,436
Записей в блоге: 1
04.07.2016, 20:43 4
Лучший ответ Сообщение было отмечено virusnyak333 как решение

Решение

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
<?php
 
class NodeEach {
    private $parent;
    private $children;
    private $shutdown;
    public function __construct( $parent , $children , $callback ) {
        if ( !$children ) { return; }
 
        $this->parent = $parent;
        $this->children = $children;
        
        for($this->children = $this->parent->children; 
            $this->children->prev;
            $this->children = $this->children->prev);
 
        $this->shutdown = false;
        for(; !$this->shutdown && $this->children; $this->children = $this->children->next) {
            $callback($this->children,$this);
        }
    }
    public function Stop() { $this->shutdown = true; }
    public function Prev() { if ( isset($this->children->prev) ) { $this->children=$this->children->prev; } }
    public function Next() { if ( isset($this->children->next) ) { $this->children=$this->children->next; } }
}
abstract class Node {
    public $parent;
    public $children;
    public $prev;
    public $next;
    public $params;
 
    public function IsParent() { return !!$this->parent; }
    public function IsChildren() { return !!$this->children; }
    public function GetChildrenCount() {
        if ( !$this->IsChildren() ) { return 0; }
        $i=0; $this->EachChildren(function() use(&$i) { $i++; });
        return $i;
    }
 
    public function EachChildren( $callback ) {
        new NodeEach($this, $this->children, $callback);
    }
    
    public function AppendChildren( $node ) {
        $node->parent = $this;
        if ( !$this->IsChildren() ) { $this->children = $node; return; }
        $this->EachChildren(function($c, $each) use($node) {
            if ( !$c->next ) { 
                $c->next = $node;
                $node->prev = $c;
                $each->Stop();
            }
        });
    }
    public function BeforeChildren( $node ) {
        $node->parent = $this;
        if ( !$this->IsChildren() ) { $this->children = $node; return; }
        for($c = $this->children; $c->prev; $c=$c->prev);
        $c->prev = $node; $node->next = $c;
    }
    
    abstract function Parse($heap, $params, $selectParent);
}
abstract class ViewNode {
    private $node;
    public $attributes;
    public function __construct( Node $node , $attributes = [] ) {
        $this->node = $node;
        $this->attributes = $attributes;
    }
    public function DoView( $attributes = [] ) {
        $this->attributes = $attributes + $this->attributes;
        $buf = '';
        if ( $this->node->params ) { $buf .= $this->View( $this->node->params ); }
        if ( $this->node->IsChildren() ) { $buf .= $this->ViewChildren(); }
        return $buf;
    }
    public function DoViewChildren( $attributes = [] ) {
        $attributes += $this->attributes;
        $buf='';
        $this->node->EachChildren(function($node) use(&$buf, $attributes) {
            $buf .= (new $this($node, $attributes))->DoView();
        });
        return $buf;
    }
    
    abstract public function View( $params );
    abstract public function ViewChildren();
}
 
class NodeExample extends Node {
    public function Parse($heap, $params = null, $selectParent = 'no') {
        $this->params = $params;
        foreach($heap as $nodeRaw) {
            if ( $nodeRaw['category'] === $selectParent ) {
                $this->AppendChildren( (new $this)->Parse($heap, $nodeRaw, $nodeRaw['url']) );
            }
        }
        return $this;
    }
}
class ViewNodeExample extends ViewNode {
    public function View( $params ) {
        return "{$this->MakeTab()}<li>{$params['id']} - {$params['url']}</li>\r\n";
    }
    public function ViewChildren() {
        return
            "{$this->MakeTab()}<ul>\r\n" .
                $this->DoViewChildren( ['deep'=> $this->attributes['deep']+1] ) .
            "{$this->MakeTab()}</ul>\r\n";
    }
    private function MakeTab() {
        return str_repeat("\x09",$this->attributes['deep']);
    }
}
 
$data = [
    ['id' => 0, 'url' => 'rrr',    'category' => 'no'],
    ['id' => 1, 'url' => 'test',   'category' => 'no'],
    ['id' => 2, 'url' => 'blabla', 'category' => 'test'],
    ['id' => 3, 'url' => 'mr',     'category' => 'test'],
    ['id' => 4, 'url' => 'ml',     'category' => 'blabla']
];
 
$node = (new NodeExample)->Parse( $data );
 
echo (new ViewNodeExample($node))->DoView(['deep' => 0]);
1
23 / 23 / 0
Регистрация: 09.11.2014
Сообщений: 72
05.07.2016, 10:56  [ТС] 5
Всем спасибо за ответы - я чуть по другому решил. Может не так элегантно но работает
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$bd = bd("SELECT * FROM page WHERE category = 'no'");
        echo "<ul>";
        while($row = $bd->fetch())
        {
        echo "<li>".$row->name."</li>"; 
        page($row->url);
        }
        echo "</ul>";
        
function page($category)
{
    $bd = bd("SELECT * FROM page WHERE category = '$category'");
    while($row = $bd->fetch())
    {   
    echo "<ul><li>".$row->name."</li>"; 
    page($row->url);    
    echo "</ul>";
    }
}
0
05.07.2016, 10:56
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.07.2016, 10:56
Помогаю со студенческими работами здесь

Вывести на монитор таблицу в заданном виде
2. Вывести на монитор таблицу в виде: 54321 4321 321 21 1

Вывести таблицу Пифагора в виде матрицы 10 × 10
1.Вывести таблицу Пифагора в виде матрицы 10 × 10. Каждый элемент матрицы в таблице Пифагора...

Кортежи: вывести таблицу умножения на 6 в заданном виде
Вывести таблицу умножения на 6 в виде последовательности строк вида 6 times 1 is equal to 6...

Создать таблицу функции y=f(x) и вывести результат в виде таблицы
Такое задание. Создать таблицу функции y=f(x) в диапазоне аргумента х=0-7 с шагом dx=0.3 с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Из чего и как собрать свой домашний кинотеатр
bt_guru 21.01.2025
Создание домашнего кинотеатра: от идеи до реализации В современном мире домашний кинотеатр стал неотъемлемой частью комфортного жилого пространства, предоставляя возможность наслаждаться. . .
Ошибки стиральных машин
bt_guru 21.01.2025
Современные стиральные машины представляют собой сложные электронные устройства, оснащенные множеством датчиков и систем контроля. Они способны самостоятельно определять вес загруженного белья,. . .
Копирование (маппинг) объектов в JavaScript
bytestream 21.01.2025
В современной разработке программного обеспечения копирование объектов представляет собой фундаментальную операцию, которая требует особого внимания и понимания. Маппинг объектов в JavaScript – это. . .
Как работать с Apache Kafka в C# .NET
bytestream 21.01.2025
Apache Kafka представляет собой распределенную платформу потоковой передачи данных, которая произвела революцию в области обработки больших объемов информации в реальном времени. Эта система,. . .
Как использовать RabbitMQ в C# .NET
bytestream 21.01.2025
RabbitMQ представляет собой мощный брокер сообщений, который эффективно решает эту задачу, обеспечивая надежную передачу данных между множеством приложений. Этот инструмент реализует протокол AMQP. . .
Как объединить последние коммиты в Git
bytestream 21.01.2025
В мире разработки программного обеспечения система контроля версий Git стала незаменимым инструментом для управления исходным кодом. Одной из наиболее полезных, но порой сложных для освоения функций. . .
Как запушить новую локальную ветку (branch) в удалённый репозиторий Git и отслеживать её
bytestream 21.01.2025
В современной разработке программного обеспечения система контроля версий Git стала неотъемлемым инструментом для эффективного управления кодом и организации командной работы. Одной из ключевых. . .
Как создать директорию и все родительские директории, указанные в пути, с помощью Python
bytestream 21.01.2025
Python предоставляет мощные инструменты для работы с файловой системой через встроенные модули os и pathlib, которые значительно упрощают процесс манипуляции директориями. Эти модули содержат. . .
Как работать с массивами в JavaScript
bytestream 21.01.2025
Массивы в JavaScript представляют собой один из фундаментальных типов данных, который позволяет хранить упорядоченные коллекции различных элементов в одной переменной. Эта структура данных является. . .
Какая максимальная длина адреса (URL) в различных браузерах и стандартах
bytestream 21.01.2025
В современном мире интернет-технологий URL-адреса (Uniform Resource Locator) играют фундаментальную роль в функционировании веб-пространства. Эти уникальные идентификаторы ресурсов стали неотъемлемой. . .
Как сбросить локальный репозиторий до состояния удалённого репозитория Git
bytestream 21.01.2025
При разработке программного обеспечения с использованием системы контроля версий Git разработчики часто сталкиваются с необходимостью синхронизации локального и удаленного репозиториев. Данная задача. . .
Как запретить подсветку выделенного текста с помощью CSS
bytestream 20.01.2025
Подсветка текста при выделении является стандартным поведением браузера, которое не всегда соответствует дизайнерским решениям или функциональным требованиям веб-приложения. Выделение текста может. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru