Коллеги, помогите пожалуйста с PHP, я не догоняю как правильно

сделать - вероятно я неправильно пытаюсь использовать ссылки. Задача смоделировать в памяти дерево из набора последовательных данных, данные я получаю в цикле foreach(), дерево я завожу снаружи цикла
$tree = new stdClass(); $tree->a = null; $tree->b = null; $next = & $tree->a;
внутри цикла я завожу новую ветку и пытаюсь присвоить её ссылке $next
$newTree = new stdClass();$next = & $newTree;
и переключить ссылку $next на текущую ветку для следующей итерации:
unset($next); $next = & $newTree;
Но дерево получается пустое, что я делаю не так?

16 ответов

13 просмотров

В первую очередь изобретаешь какой-то велосипед, вместо того чтобы выбрать вариант дерева (parent_id / nested-set) и скачать подходящий модуль.

Sergey- Автор вопроса
Алексей Ильин
В первую очередь изобретаешь какой-то велосипед, в...

Мне на выходе надо получить определённый json, по этому связь через id не подходит { "blocks": { "languageVersion": 0,"blocks": [ { "type": "startBlock","deletable": false, "next": { "block": { "type": "SupportApp", "fields": { "SupportName": "7_03833", "SupportTimeout": 20 } } } } ] } }

Алексей Ильин
В первую очередь изобретаешь какой-то велосипед, в...

Хех и как ты будешь с parent_id, вытаскивать, допустим, 20 уровней родителей ноды? Или как ты будешь с nested set перестраивать дерево при переносе ветвей графа?

Gena Voituk
Хех и как ты будешь с parent_id, вытаскивать, допу...

Инструмент выбирается под задачу и для 20 уровней с необходимостью их строить я не буду выбирать схему с parent. С движением веток в нестед не понятно, удалил из одной, вставил в другую, в чем проблема

Алексей Ильин
Инструмент выбирается под задачу и для 20 уровней ...

Насколько я помню, в nested set записываетсч право и лево. И эти значения записываются при полном переборе дерева. Большая структура - огромные вычесления каждый раз. Подобный паттерн для хранения иерархии пользователей не подойдет

Gena Voituk
Насколько я помню, в nested set записываетсч право...

Так ты их меняешь не перебором, а одним update right+1 where right > current

Сейчас перечитал на вики и убедился. Обновление узла требует перенумерации дерева и поэтому является дорогостоящим. Твой подход не взлетит. При таком паттерне при смене позиции ноды надо пересчитывать все дерево. Ровно как и при добавлении новой ноды.

Gena Voituk
Сейчас перечитал на вики и убедился. Обновление уз...

Твоя ошибка в том, что ты пинаешь какого-то вакуумного коня, а я для этого могу подключить json филд или вообще монгу

Алексей Ильин
Твоя ошибка в том, что ты пинаешь какого-то вакуум...

Разговор начался с хранения иерархических структур в реляционных бд. Понятно, что nosql бд для этого ужобнен

Gena Voituk
Разговор начался с хранения иерархических структур...

Разговор начался с изобретения какой-то хрени, а я намекнул, что неплохо бы не решение свое проталкивать, а хотя бы условие задачи озвучить

Gena Voituk
Разговор начался с хранения иерархических структур...

Может тогда стоит упомянуть, что есть графовые СУБД

Алексей Ильин
В первую очередь изобретаешь какой-то велосипед, в...

Ааа нашел, ну ты кстати тоже начал, с "изобретаешь велосипед", это может его тестовое на собесе?:)

Nikolay Churkin
Ааа нашел, ну ты кстати тоже начал, с "изобретаешь...

Вообще, на собесе я бы задал контрвопрос "а нахрена это городить, скажи задачу, я тебе подходящее решение предложу" и нормальный техлид бы это оценил выше потуг соорудить что-то со ссылками.

Похожие вопросы

Обсуждают сегодня

Приветствую всех, возникла проблема, до этого писал бота в простом формате где при выполнении условий приходило через send_message информация, сейчас решил добавить хендлер на...
Andrew
4
Портфолио: Зовут меня Александр, мне 36 лет. Город Пушкино. Общий рабочий стаж: ~14 лет Уровень квалификации: Senior Full-stack developer Где прочесть мой код? https://github....
Magic
10
Ребят, привет. У кого-то есть опыт заказа мерча в сторе? Есть успешные кейсы? Чёт у меня турецкую карту не принимает
Vladimir F.
7
Ребят, а больше никто поработать не хочет? Кто свободен?
AIZ
4
Портфолио: Зовут меня Александр, мне 41 год. Город Киров. Общий рабочий стаж: ~14 лет Уровень квалификации: Senior Full-stack developer Где прочесть мой код? https://github.co...
Magic
11
знаешь как они вообще работают?
Akcium Сергей
3
Всем привет. Есть кто разбирается в платежках? Что б принимать из других стран и выплачивать рф снг
Musa
6
Приветствую всех, есть вопросик. Передали проект на OctoberCms, без инсталяшки в полуразвернутом виде, нужно было залить бекап бд, после залития бд, оказалось, что части строк...
Лео
14
где собака, админ группы? нычкуется и боится проявить волю, в толерантность еще не наигрался? @yelizariev
Ognezar
61
Есть магистры regex в чате? Задача: нужно написать regex который мэтчит полные (без сокращений по типу ::1/128) ipv6 адреса кроме 2001:0df7:cef7:29f7:52f7:adf7:2cf7:4ff7, при ...
Илья
5
Карта сайта