Проблема с деревом - как избавиться от пустых массивов?

M2
На сайте с 11.01.2011
Offline
341
448

Доброе утро!

Имеется таблица следующей структуры:

cat_id | parent_id | cat_name | cat_dir

Соответственно, ID группы, ID родителя, название группы и её каталог.

Написал свой класс для работы с деревьями такого вида, всё работает, кроме функции, которая бы выводила всё дерево в массив.

Вот такая функция:


public function PrintTreeArray($ParentID, $lvl)
{
global $lvl;
$lvl++;

$res = array();

$sSQL="SELECT cat_id, cat_name FROM photo_browser_categories WHERE parent_id = ".$ParentID;
$result=mysql_query($sSQL);

if (mysql_num_rows($result) > 0) {

while ( $row = mysql_fetch_array($result) )
{
$ID1 = $row["cat_id"];

$res[] = $row["cat_name"];
$res[] = $this->PrintTreeArray($ID1, $lvl);
$lvl--;
}
}

return $res;
}

Как бы просто на вывод дерева она работает (немножко изменённая). А вот в таком виде, в котором она представлена, она выводит массив такого плана:


Array
(
[0] => 1
[1] => Array
(
[0] => 1.1
[1] => Array
(
)

[2] => 1.2
[3] => Array
(
)


[4] => 1.3
[5] => Array
(
[0] => 1.3.1
[1] => Array
(
[0] => 1.3.1.1
[1] => Array
(
)


)

)

)

[2] => 2
[3] => Array
(
[0] => 2.1
[1] => Array
(
)


[2] => 2.2
[3] => Array
(
)


[4] => 2.3
[5] => Array
(
[0] => 2.3.1
[1] => Array
(
)


[2] => 2.3.2
[3] => Array
(
)


[4] => 2.3.3
[5] => Array
(
)


)

)

)

То, что выделено жирным шрифтом, быть не должно... а как от этого избавиться??

------------------- Крутые VPS и дедики. Качество по разумной цене ( http://cp.inferno.name/view.php?product=1212&gid=1 ) VPS25OFF - скидка 25% на первый платеж по ссылке выше
H
На сайте с 31.10.2008
Offline
33
#1

Не знаю. насколько красиво, но можно так:

public function PrintTreeArray($ParentID, $lvl)  

{
global $lvl;
$lvl++;

$res = array();

$sSQL="SELECT cat_id, cat_name FROM photo_browser_categories WHERE parent_id = ".$ParentID;
$result=mysql_query($sSQL);

if (mysql_num_rows($result) > 0) {

while ( $row = mysql_fetch_array($result) )
{
$ID1 = $row["cat_id"];
$ar =
$res[] = $row["cat_name"];
$ar = $this->PrintTreeArray($ID1, $lvl);
if ($ar) $res[] = $ar;
$lvl--;
}
}

return count($res)>0?$res:false;
}

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