Дерево категорий без рекурсии на php

PHP
В приведенной ниже статье Вы сможете найти ответ на то "Как построить на php дерево сущностей (категорий или комментариев) без использования рекурсивных запросов".

Дана таблица в которой хранятся все категории с указанием у них родительской категории. Необходимо построить дерево категорий, при этом не используя рекурсию. Вот как это можно сделать!

Первый делом извлечем все категори из базы. При этом бывает что в базе полный бардак и у категории товаров может отсутствовать название.
SELECT cat_id, parent_id, cat_title, cat_url FROM categoty WHERE cat_title != ''

На следующем шаге переструктурируем получение категории таким образом, чтобы айди категории был ключом, а все остальные значения — были набором значений соответсвующие ему.
foreach($cats as $cat) {
    $tree[$cat['category_id']] = $cat;
    unset($tree[$cat['category_id']]['category_id']);
}

Делее формируем дерево
$tree['0'] = array(
  'parent_id' => '',
  'category_name' => 'Корень',
  'category_url' => ''
);
foreach ($tree as $id => $node) {
  if (isset($tree[$node['parent_id']])) {
    $tree[$node['parent_id']]['sub'][$id] =& $tree[$id];
  }
}

var_dump($tree[0]['sub']);

В $tree[0]['sub'] будет лежать дерево категорий.
Такую же методику можно использовать и при создании списка комментариев для статьи.
Понравился пост? Поделись с друзьями:

0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.