Дерево категорий

A
На сайте с 09.01.2013
Offline
33
380

Господа доброго времени суток.

Подскажите пожалуйста, есть код, строит дерево категорий, все ветки. Как сделать так, чтобы строило 1 и 2 ветки, остальные не строило, или же просто не выводило.


function get_tree($p_id)
{
$res_array=array();
$res_array[]=array('ul'=>1, 'id_category'=>null, 'name_category'=>null, 'url_name_category'=>null, 'rate'=>null);
$sql = querySQL("select id_category, name_category, url_name_category, rate, id_parent_category from categories where id_parent_category='".$p_id."' ORDER BY rate DESC");

foreach($sql as $tmp)
{
$res_array[]=array('ul'=>0, 'id_category'=>$tmp['id_category'], 'name_category'=>$tmp['name_category'], 'url_name_category'=>$tmp['url_name_category'], 'rate'=>$tmp['rate'], 'id_parent_category'=>$tmp['id_parent_category']);
$tmp_array=get_tree($tmp['id_category']);
if (!is_null($tmp_array)) $res_array=array_merge($res_array, $tmp_array);
}
if (sizeof($res_array)>1)
{
$res_array[]=array('ul'=>2, 'id_category'=>null, 'name_category'=>null, 'url_name_category'=>null, 'rate'=>null, 'id_parent_category'=>null);
}
else $res_array=null;
return $res_array;
}

$article_tree=get_tree(0);
Z
На сайте с 17.09.2010
Offline
34
#1


function get_tree($p_id, $i)
{
$res_array=array();
$res_array[]=array('ul'=>1, 'id_category'=>null, 'name_category'=>null, 'url_name_category'=>null, 'rate'=>null);
$sql = querySQL("select id_category, name_category, url_name_category, rate, id_parent_category from categories where id_parent_category='".$p_id."' ORDER BY rate DESC");

foreach($sql as $tmp)
{
$res_array[]=array('ul'=>0, 'id_category'=>$tmp['id_category'], 'name_category'=>$tmp['name_category'], 'url_name_category'=>$tmp['url_name_category'], 'rate'=>$tmp['rate'], 'id_parent_category'=>$tmp['id_parent_category']);
if ($i < 2) $tmp_array=get_tree($tmp['id_category'], ++$i);
if (!is_null($tmp_array)) $res_array=array_merge($res_array, $tmp_array);
}
if (sizeof($res_array)>1)
{
$res_array[]=array('ul'=>2, 'id_category'=>null, 'name_category'=>null, 'url_name_category'=>null, 'rate'=>null, 'id_parent_category'=>null);
}
else $res_array=null;
return $res_array;
}

$article_tree=get_tree(0, 0);
A
На сайте с 09.01.2013
Offline
33
#2
zerocube:

function get_tree($p_id, $i)
{
$res_array=array();
$res_array[]=array('ul'=>1, 'id_category'=>null, 'name_category'=>null, 'url_name_category'=>null, 'rate'=>null);
$sql = querySQL("select id_category, name_category, url_name_category, rate, id_parent_category from categories where id_parent_category='".$p_id."' ORDER BY rate DESC");

foreach($sql as $tmp)
{
$res_array[]=array('ul'=>0, 'id_category'=>$tmp['id_category'], 'name_category'=>$tmp['name_category'], 'url_name_category'=>$tmp['url_name_category'], 'rate'=>$tmp['rate'], 'id_parent_category'=>$tmp['id_parent_category']);
if ($i < 2) $tmp_array=get_tree($tmp['id_category'], ++$i);
if (!is_null($tmp_array)) $res_array=array_merge($res_array, $tmp_array);
}
if (sizeof($res_array)>1)
{
$res_array[]=array('ul'=>2, 'id_category'=>null, 'name_category'=>null, 'url_name_category'=>null, 'rate'=>null, 'id_parent_category'=>null);
}
else $res_array=null;
return $res_array;
}

$article_tree=get_tree(0, 0);

Этот код вообще перемешал их

S
На сайте с 05.04.2013
Offline
19
#3

Вот так попробуйте:


function get_tree($p_id, $level = 0)
{
$lv = ($level > 0) ? $level - 1 : 0;

$res_array=array();
$res_array[]=array('ul'=>1, 'id_category'=>null, 'name_category'=>null, 'url_name_category'=>null, 'rate'=>null);
$sql = querySQL("select id_category, name_category, url_name_category, rate, id_parent_category from categories where id_parent_category='".$p_id."' ORDER BY rate DESC");

foreach($sql as $tmp)
{
$res_array[]=array('ul'=>0, 'id_category'=>$tmp['id_category'], 'name_category'=>$tmp['name_category'], 'url_name_category'=>$tmp['url_name_category'], 'rate'=>$tmp['rate'], 'id_parent_category'=>$tmp['id_parent_category']);

if ($level > 0)
{
$tmp_array = get_tree($tmp['id_category'], $lv);
if (! is_null($tmp_array)) $res_array = array_merge($res_array, $tmp_array);
}
}

if (sizeof($res_array)>1)
{
$res_array[]=array('ul'=>2, 'id_category'=>null, 'name_category'=>null, 'url_name_category'=>null, 'rate'=>null, 'id_parent_category'=>null);
} else
$res_array=null;

return $res_array;
}

$article_tree=get_tree(0, 1);

Обратите внимание на последнюю строку в коде, 1 - это колличество уровней вложенности.

A
На сайте с 09.01.2013
Offline
33
#4

SVatlin, благодарю. Возьму пример на вооружение.

S
На сайте с 05.04.2013
Offline
19
#5

внёс в код выше мелкие поправки

---------- Добавлено 11.07.2013 в 19:28 ----------

antyan:
SVatlin, благодарю. Возьму пример на вооружение.

Дык а код то работает как надо?

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий