Задать вопрос
@Andrey_71

Tommy Lacroix tree. Вывод многоуровневого меню. Как работает?

Здравствуйте! Не смогли бы Вы помочь разобраться с методом Tommy Lacroix tree? В функции getTree() создаётся дерево массива $dataset с условием if. Как я понял в массив $tree, попадают значения с parent == 0, а затем под каждым таким значением добавляется массив $dataset[$node['parent']]['childs'][$id] - второй уровень вложенности. После этого работает только else, и благодаря '&' перед $node, в foreach вместо $dataset подставляется $dataset[$node['parent']]['childs'][$id] - третий уровень и тд. Получается здесь 2 массива: $tree с parent == 0 и $dataset[$node['parent']]['childs'][$id] с parent != 0. Подскажите, это так или я ошибаюсь? Если не так, то опишите пожалуйста подробнее, что и как происходит в методе? В и-нете, информация о ссылках 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).

Сам метод:
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;
}
  • Вопрос задан
  • 915 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
Sphinx123
@Sphinx123
Web-программист @Yii2
Целиком поддерживаю Andrey_71, т.к. считаю, код работает и работает неплохо! Не важно каким образом это сделано! Дешево и сердито. А если комментаторы такие умные, так аргументируйте свои высказывания, покажите, как надо делать. А хаять youtube и называть г-кодом понимание одного человека, как он это делает - ума большого не надо! Конечно, на youtube хватает всяких ... , но не все же такие.
Что касается деревьев, то вот ссылка, но это для Laravel, хотя может ясность какя-то появится https://github.com/lazychaser/laravel-nestedset#wh... .
Да, и вот ещё в wikipedia ссылочка тоже неплохая - https://ru.wikipedia.org/wiki/%D0%92%D0%BB%D0%BE%D...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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