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

Rush

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

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

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

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

Rush

Новичок
хехе
это я знаю
Но чтобы реализовать до конца, чего-то не хватает (ума наверное)

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

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

Фанат

oncle terrible
Команда форума
Мне неясно где при этом хранить результаты
хм.
а вот это кто писал:
возвращала массив со всеми "детьми"
-~{}~ 28.01.06 16:20:

что делать в случае если "детей" нет..
эээ... не вызывать в цикле рекурсивно эту функцию?
 

Rush

Новичок
Вот попытка... с учетом сказанного;)
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;
    }

  }
 

Фанат

oncle terrible
Команда форума
хммммм...
а ты не пробовал отладочную информацию выводить во время работы скрипта?
 

white phoenix

Новичок
Rush
> array_merge ($childs, get_cat_childs($cid));
$childs = array_merge ($childs, get_cat_childs($cid));

-~{}~ 28.01.06 16:32:

И children, а не childs :)
 

Rush

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

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

Вроде работает, но в массиве появляются лишние элементы со значением false...
 

Фанат

oncle terrible
Команда форума
нет, не ошибки.
а отладосную информацию.
значение переменных
 

Rush

Новичок
хы
закоментил
PHP:
else {
      return false;
    }
и все заработало как надо ;)
Большое спасибо
 

white phoenix

Новичок
А вот что получилось у меня:
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;
 } 
}
 

Rush

Новичок
Фанат, я понял - да, пробовал
Иначе наверное ниасилил бы...

-~{}~ 28.01.06 18:41:

white phoenix Конечно! Нужно возвращать пустой массив! Большое спасибо
 

Popoff

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

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