Доброго времени суток, уважаемые форумчане!
Столкнулся со следующей задачей: есть таблица категорий со следующей вполне стандартной и известной структурой: |id|parent_id|name|...| . Когда-то еще давно нашел где-то в сети очень хорошую функцию по формированию дерева категорий с любым уровнем вложенности:
PHP:
скопировать код в буфер обмена
public function mapTree($dataset) { $tree = []; foreach ($dataset as $id=>&$node) { if (!$node['parent_id']) { $tree[$id] = &$node; } else { $dataset[$node['parent_id']]['childs'][$id] = &$node; } } return $tree; }
К своему сожалению и стыду я до сих пор не особо силен в теме деревьев, поэтому работая над задачей по формированию "особого" дерева категорий снова столкнулся с трудностями Задача заключается вот в чем: нужно сформировать из БД структурированное дерево таким образом:
Категория 1 (корень)
- Название категории 1
- Одномерный массив всех потомков категории 1 с учетом всех вложенностей
Категория 2 (корень)
- Название категории 2
- Одномерный массив всех потомков категории 2 с учетом всех вложенностей
... и так далее
Сложность заключается в том, что в базе данных, скажем, у "Категории 1" (являющейся корнем с parent_id=0) может быть сколь угодно потомков, а у этих потомков в свою очередь - свои потомки, и т.д. - короче говоря, древовидная структура с неизвестным уровнем вложенности. Таким образом, нужно чтобы в результате на выходе был массив приведенной выше структуры.
Вопрос: можно ли как-то модифицировать приведенную мною функцию, или как вообще это реализовать?
Буду очень признателен вам за помощь!
P.S: очень хотелось бы для себя разобраться с этой темой на каких-то простых примерах, чтобы наверняка "дошло", а также если вам не составит труда - не могли бы вы рассказать на примере как наоборот можно получить список всех предков для текущей категории (очень может пригодится для таких же новичков как я - например, при формировании хлебных крошек на сайте).
|