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

Tommy Lacroix tree. Вывод многоуровневого меню

27.05.2019, 21:19. Показов 3030. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! Не смогли бы Вы помочь разобраться с методом Tommy Lacroix tree? В и-нете, информация о ссылках php скудноватая. Искал описание этого метода, но так ничего не нашёл.
Таблица базы данных:
(`id`, `title`, `parent`)
(685, 'Комплектующие к Apple', 0)
(691, 'Запчасти iPad', 685)
(692, 'Запчасти iPhone', 685)
(693, 'Запчасти iPod', 685)
(694, 'Запчасти Mac', 685)
(695, 'iPad', 691)
(696, 'iPad 2', 691)
(697, 'iPad NEW (iPad 3)', 691)
(698, 'iPad 4', 691)
(699, 'iPad mini', 691)
(700, 'iPhone', 692)
(701, 'iPhone 3G/3GS', 692)
(702, 'iPhone 4', 692)
(703, 'iPhone 4S', 692)
(704, 'iPhone 5', 692)
(705, 'Микросхемы Apple', 685).
Сам метод:
PHP
1
2
3
4
5
6
7
8
9
10
11
function getTree($dataset) {
    $tree = array();
    foreach ($dataset as $id => &$node) {   
        if (!$node['parent']){
            $tree[$id] = &$node;
        }else{
            $dataset[$node['parent']]['childs'][$id] = &$node;
        }
    }
    return $tree;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.05.2019, 21:19
Ответы с готовыми решениями:

Реализация многоуровневого меню
Всем доброго дня! Помогите с кодом меню, проблема в том что нажимая клавишу 1 он опять же...

Выравнивание многоуровневого меню
Здравствуйте. Как выровнять по центру главное меню (единственное)? Спасибо. <html> ...

Стилизация многоуровневого меню
Помогите с многоуровневым меню вроде иерархию правильно сделала а со стилями проблема <!DOCTYPE...

Построение многоуровневого меню выдает ошибку
При попытке построения многоуровневого меню выдает ошибку "System.InvalidOperationException:...

9
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
27.05.2019, 21:36 2
А что конкретно непонятно?
Цитата Сообщение от Andrey7 Посмотреть сообщение
В и-нете, информация о ссылках php скудноватая
Как работают ссылки в PHP
0
1 / 1 / 0
Регистрация: 27.04.2016
Сообщений: 22
27.05.2019, 21:58  [ТС] 3
Например, из условия if &$node попадает в массив $tree, т.к $tree[$id] = &$node, но как $dataset[$node['parent']]['childs'][$id] оказывается в $tree - никак не пойму.
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
27.05.2019, 22:13 4
Цитата Сообщение от Andrey7 Посмотреть сообщение
но как $dataset[$node['parent']]['childs'][$id] оказывается в $tree - никак не пойму.
потому что в tree есть ссылка на node, который в свою очередь часть dataset.
Попробуй в цикл добавить var_dumpы, чтобы видеть что происходит.
0
1 / 1 / 0
Регистрация: 27.04.2016
Сообщений: 22
31.05.2019, 22:22  [ТС] 5
Получается, после первого прохода по массиву, в foreach подставляется $dataset[$tree[$id]['parent']]['childs'][$id] as $id => &$node, а в else - $dataset[$tree[$id]['parent']]['childs'][$id], где вместо $node подставляется $tree[$id]?
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
31.05.2019, 22:24 6
Цитата Сообщение от Andrey7 Посмотреть сообщение
Получается, после первого прохода по массиву, в foreach подставляется $dataset[$node['parent']]['childs'][$id] as $id => &$node, а в else - $dataset[$tree[$id]['parent']]['childs'][$id], где вместо $node подставляется $tree[$id]?
Не понял что тут написано.
PHP
1
2
3
4
5
6
7
8
9
10
$arr = [
    ['key' => 10],
    ['key2' => 'i am in $arr only'],
];
$arr2 = [];
$arr2[] = &$arr[0];
// теперь $arr[0] и $arr2[0] одно и то же
$arr[0]['new_key'] = 20;
var_dump($arr, $arr2);
// хоть изменялся элемент $arr, в $arr2 видны те же изменения
В коде выше принцип тот же.
0
0 / 0 / 0
Регистрация: 08.07.2014
Сообщений: 35
17.08.2019, 01:39 7
Andrey7, привет, по итогу ты понял как работает данный алгоритм, следовал за тобой по пятам на разных сайтах, не мог бы ты обьяснить как устроен данный метод
0
1 / 1 / 0
Регистрация: 27.04.2016
Сообщений: 22
17.08.2019, 21:01  [ТС] 8
имя, привет! В $tree[$id] попадает всё, что имеет parent = 0, затем в else $node перезаписывается в $dataset[$node['parent']]['childs'][$id], где $node['parent'] будет соответствовать `id` родительской категории, выводя её. Внизу дописывается ['childs'] и в нём выводится вложенный массив с `id` того самого $node, что находится в else. Благодаря $tree[$id] = &$node(ссылка), $dataset[$node['parent']]['childs'][$id] попадает в $tree. Из-за того, что и в else присутствует так же &$node(ссылка) строится дерево массива. Понял как то так. Может я и ошибаюсь, но подробного описания так и не нашёл. Так что разбирался сам.
1
0 / 0 / 0
Регистрация: 08.07.2014
Сообщений: 35
17.08.2019, 21:34 9
Andrey7, Спасибо за ответ, тоже сидел долго мозговал, как я понял данные меняются в дата и поскольку в tree попадает ссылка на эти данные а не просто копия то данные меняются и в tree, кстати как я понял ты проходишь или проходил курс по php, как он тебе, автор конечно хорошо поясняет но почти не дает домашних заданий, тебе удалось закрепить результат, как бы ты оценил пользу от этого курса, спасибо
0
1 / 1 / 0
Регистрация: 27.04.2016
Сообщений: 22
18.08.2019, 08:21  [ТС] 10
имя. Ещё не прошёл, в середине курса. Трудновато, но стараюсь разобраться со всем, что даётся в уроках
0
18.08.2019, 08:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.08.2019, 08:21
Помогаю со студенческими работами здесь

запомнить позицию многоуровневого меню при переходе
есть многоуровневое меню <ul> <li><a></a> <ul> <li> <a></a> ...

Как реализовать алгоритм вывода из бд многоуровневого меню?
есть таблица: 1 0 "Главная" 2 0 "Новости" 3 0 "О компании" 4 3 "Контакты" 5 3...

Где можно почитать про создание многоуровневого меню?
хочется научится создавать ГОРИЗОНТАЛЬНОЕ многоуровневое меню на html+css, а уроков толковых найти...

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru