function recc2($id){
connect();
$q = "select * from category where parent_id=$id order by id,name"; //извлекаем имя, id и родительский id
$res = mysql_query($q) or die("query failed: ".mysql_error()); //запрашивем
$nrows = mysql_num_rows($res); // подсчитываем количество ячеек
if($nrows > 0){ // если результат не нулевой
for ($x=0;$x<$nrows;$x++) // цикл по результам
{
$row = mysql_fetch_array($res);
$nrows+=recc2($row['id']);
return $nrows;
}
}
else return $nrows=0;
}
echo recc2($id);
function recc2($id){
$q = "select * from category where parent_id=$id order by id,name";
$res = mysql_query($q) or die("query failed: ".mysql_error());
if (mysql_num_rows($res))
for ($sum = 0; $row = mysql_fetch_assoc($res); )
$sum += recc2($row['id']);
else return 1;
return $sum;
}
Потому что я наивно полагал, что единственная твоя проблема - в рекурсии. Я ошибался.Автор оригинала: dadesign
Гм... почему "броневым"... я кажется специально запостил темы в форум для новичков... ?![]()
Иначе какой-бы смысл был в цикле?я например не знал, что возвращать $num нужно после всего... вне for
Это не обязательно (к алгоритму это никакого отношения не имеет, просто привычка), а если интересно - можно подсмотреть в мануале по [m]mysql_fetch_assoc[/m]и про mysql_fetch_assoc вообще ничего не знаю...
В функции то рекурсивной зачем его постоянно делать?connect - просто по быстрому ф-ция коннекта к базе
Интересно, а как ты без него собирался обойтись? Похоже, у тебя ещё и проблемы с областью видимостиа return оказывается полезная вещь...
По моему я уже говорил, что для более оптимального решения надо предоставлять побольше информации о задаче.Автор оригинала: untied
А что вы так прицепились к рекурсии?
Это не всегда возможно.Я бы выбрал одним запросом все идентификаторы и родительские_идентификаторы в двумерный массив.
По твоему, для этого рекурсия бы не пригодилась? Ну ладно, написал бы ты это итеративно - но, имхо, рекурсия всё же наглядна. У человека же была проблема с рекурсией как таковой - а откуда берутся данные - вопрос десятый.А потом многократно сканировал его в поисках потомков заданного id
Это ты немножко врёшь, впрочем, ошибка всё равно имела место быть и вполне устранялась отладкой (PHP FAQ: Ничего не работает! Что делать???)Автор оригинала: dadesign
функция возвращает 1 если нет потомков и 1 если есть один потомок...![]()
function query($id){
static $arr = array( 2 => array(0 => 'Продукты питания'),
4 => array(2 => 'Колбасы'),
6 => array(4 => 'Москва'),
5 => array(4 => 'Микоян'),
11 => array(0 => 'Книги'),
12 => array(11 => 'Фантастика'),
16 => array(12 => 'Лукьяненко'),
13 => array(11 => 'Фентези'),
14 => array(11 => 'Детективы'),
1 => array(0 => 'Электроника'),
7 => array(1 => 'Видаки'),
9 => array(7 => 'VHS'),
10 => array(7 => 'VHS-C'),
15 => array(10 => 'Аксессуары'),
8 => array(1 => 'ДВД'),
);
$res = array();
foreach ($arr as $k => $v)
if (isset($v[$id]))
$res[$k] = array('id' => $k);
return $res;
}
function recc2($id){
$res = query($id);
if ($sum = count($res))
for (; $row = array_shift($res); )
$sum += recc2($row['id']);
else return 0;
return $sum;
}
echo recc2(0);
function recc2($id){
$q = "select * from category where parent_id=$id order by id,name";
$res = mysql_query($q) or die("Query failed: ".mysql_error());
if ($sum=mysql_num_rows($res))
for (; $row = mysql_fetch_array($res); )
$sum += recc2($row['id']);
else return 0;
return $sum;
}
echo recc2($id);