ПОлучение всех "детей" в дереве

  • Автор темы Автор темы Rush
  • Дата начала Дата начала

Rush

Новичок
ПОлучение всех "детей" в дереве

Имеется древовидная структура, хранимая в БД. Таблица из трех полей -

id_категории
id_родительской_категории
название

Подскажите пожалуйста алгоритм, как реализовать функцию, которая получала бы id категории, а возвращала массив со всеми "детьми" (включая "детей" подкатегорий заданной категории)
 
хехе
это я знаю
Но чтобы реализовать до конца, чего-то не хватает (ума наверное)

Мысли были такие
В функции делаем запрос на поиск всех детей данной категории
Если дети есть - в цикле вызываем рекурсивно эту функцию для каждого "ребенка"

Мне неясно где при этом хранить результаты.,... и что делать в случае если "детей" нет..
 
Мне неясно где при этом хранить результаты
хм.
а вот это кто писал:
возвращала массив со всеми "детьми"

-~{}~ 28.01.06 16:20:

что делать в случае если "детей" нет..
эээ... не вызывать в цикле рекурсивно эту функцию?
 
Вот попытка... с учетом сказанного;)
PHP:
  function get_cat_childs($category_id) {
  
    $childs = array();

    $result = mysql_query("SELECT categories_id FROM categories WHERE parent_id = '$category_id'");

    if (mysql_num_rows($result) > 0) {

        while (list($cid) = mysql_fetch_row($result)) {
          $childs[$cid] = $cid;
          array_merge ($childs, get_cat_childs($cid));
        }
        return $childs
    } else {
      return false;
    }

  }
 
хммммм...
а ты не пробовал отладочную информацию выводить во время работы скрипта?
 
Rush
> array_merge ($childs, get_cat_childs($cid));
$childs = array_merge ($childs, get_cat_childs($cid));

-~{}~ 28.01.06 16:32:

И children, а не childs :)
 
Фанат Пробовал, ничего не выводится, error_reporting(E_ALL);

white phoenix, да., конечно - невнимательно посмотрел....

Вроде работает, но в массиве появляются лишние элементы со значением false...
 
нет, не ошибки.
а отладосную информацию.
значение переменных
 
хы
закоментил
PHP:
else {
      return false;
    }
и все заработало как надо ;)
Большое спасибо
 
А вот что получилось у меня:
PHP:
function get_cat_children($category_id)
{
 $result = mysql_query("SELECT `categories_id` FROM `categories` WHERE parent_id = '".intval($category_id)."'"); 
 if (mysql_num_rows($result) == 0) {return array();}
 else
 { 
  $children = array(); 
  while (list($cid) = mysql_fetch_row($result))
  {
   $children[$cid] = $cid;
   $children = array_merge($children,get_cat_children($cid));
  }
  return $children;
 } 
}
 
Фанат, я понял - да, пробовал
Иначе наверное ниасилил бы...

-~{}~ 28.01.06 18:41:

white phoenix Конечно! Нужно возвращать пустой массив! Большое спасибо
 
Rush
Как однажды сказал наш шеф, если перед Вами возникла задача, то не сомневайтесь, существует как минимум десять готовых решений. И это - если задача очень сложная. Сколько решений существует для простых задач - сощитать невозможно - их очень много.

Твоя задача - простая.
 
Сверху