Коллеги, помогите пожалуйста с 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 ответов

61 просмотр

В первую очередь изобретаешь какой-то велосипед, вместо того чтобы выбрать вариант дерева (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
Ааа нашел, ну ты кстати тоже начал, с "изобретаешь...

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

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

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

Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
сделал сайт, прикрутил в боте сайт, и виджет логина. как автоматически логинить пользователя в аккаунт(телеграм), при входе с бота?
Александра Чернивецкая
5
Объясните, пожалуйста, почему компилятор ругается на использование в условии неинициализированной переменной: int x; Task.Run(async () => { x = await somefunc(); }).Wait...
Александр
5
Ребят, подскажите, пожалуйста, почему в префиксе к ассетам, которые генерируются через фильтр | theme в шаблоне, стал вдруг появляться index.php? Вот так выглядит ссылка на а...
Виталий
1
Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
4
Блин, ребята, сори за тупые вопросы. А можно ли как-то открыть вебапку по нажатию на кнопку в меню(которое появляется слева, команды)?
Artem Stormageddon
3
а плаксы из-под питона умеют только в комфортных условиях что-то выдавить из себя?)
Lencore
9
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
13
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
Коллеги, может знает кто, можно ли цвет бейджа счётчика в BackendMenu менять без бубнов?
Alex Blaze
3
Карта сайта