Coś mi wyszło, wygląda chyba na prawidłowy układ, ale nie wiem czy o to Ci chodziło?
class Categories {
function __construct() {
$this->all_cats = $this->cat_tree();
}
function cat_tree() {
// w poniższej zmiennej $cat_tree będzie wynik z bazy danych
1=>array(
"cat_name"=>"Root",
"ip"=>"1.",
"level"=>"0",
"childs"=>array(
0=>"11",
1=>"13",
2=>"2",
3=>"3",
4=>"4",
5=>"12",
6=>"14",
),
),
11=>array(
"cat_name"=>"Auto / Moto",
"ip"=>"1.11.",
"level"=>"1",
"childs"=>array(
0=>"17",
),
),
13=>array(
"cat_name"=>"Komputery",
"ip"=>"1.13.",
"level"=>"1",
"childs"=>array(
0=>"19",
1=>"20",
),
),
2=>array(
"cat_name"=>"Produkty spożywcze",
"ip"=>"1.2.",
"level"=>"1",
"childs"=>array(
0=>"25",
1=>"30",
),
),
3=>array(
"cat_name"=>"Sprzęt AGD",
"ip"=>"1.3.",
"level"=>"1",
"childs"=>array(
0=>"15",
1=>"23",
2=>"16",
),
),
4=>array(
"cat_name"=>"Sprzęt RTV",
"ip"=>"1.4.",
"level"=>"1",
"childs"=>array(
0=>"28",
),
),
12=>array(
"cat_name"=>"Sprzęt sportowy",
"ip"=>"1.12.",
"level"=>"1",
"childs"=>array(
0=>"18",
),
),
14=>array(
"cat_name"=>"Zabawki",
"ip"=>"1.14.",
"level"=>"1",
"childs"=>array(
0=>"22",
),
),
19=>array(
"cat_name"=>"Dyski twarde",
"ip"=>"1.13.19.",
"level"=>"2",
"childs"=>array(),
),
15=>array(
"cat_name"=>"Miksery",
"ip"=>"1.3.15.",
"level"=>"2",
"childs"=>array(),
),
20=>array(
"cat_name"=>"Monitory",
"ip"=>"1.13.20.",
"level"=>"2",
"childs"=>array(),
),
23=>array(
"cat_name"=>"Odkurzacze",
"ip"=>"1.3.23.",
"level"=>"2",
"childs"=>array(),
),
17=>array(
"cat_name"=>"Opony",
"ip"=>"1.11.17.",
"level"=>"2",
"childs"=>array(),
),
25=>array(
"cat_name"=>"Pieczywo",
"ip"=>"1.2.25.",
"level"=>"2",
"childs"=>array(),
),
22=>array(
"cat_name"=>"Puzzle",
"ip"=>"1.14.22.",
"level"=>"2",
"childs"=>array(),
),
18=>array(
"cat_name"=>"Rowery",
"ip"=>"1.12.18.",
"level"=>"2",
"childs"=>array(),
),
30=>array(
"cat_name"=>"Soki i napoje",
"ip"=>"1.2.30.",
"level"=>"2",
"childs"=>array(),
),
"cat_name"=>"Telewizory",
"ip"=>"1.4.28.",
"level"=>"2",
"childs"=>array(),
),
16=>array(
"cat_name"=>"Zmywarki",
"ip"=>"1.3.16.",
"level"=>"2",
"childs"=>array(
0=>"31",
),
),
31=>array(
"cat_name"=>"Do zabudowy",
"ip"=>"1.3.16.31.",
"level"=>"3",
"childs"=>array(
0=>"32",
1=>"33",
2=>"34",
),
),
32=>array(
"cat_name"=>"45 cm szerokie",
"ip"=>"1.3.16.31.32.",
"level"=>"4",
"childs"=>array(),
),
33=>array(
"cat_name"=>"60 cm szerokie",
"ip"=>"1.3.16.31.33.",
"level"=>"4",
"childs"=>array(),
),
34=>array(
"cat_name"=>"90 cm szerokie",
"ip"=>"1.3.16.31.34.",
"level"=>"4",
"childs"=>array(),
),
);
return $cat_tree;
}
function categories_tree($child){
$tree = $this->all_cats;
$output = '<ul>';
foreach ($tree as $k =>$v){
if($k == $child){
if(!empty($v['childs'])){ $output .='<li>' . $v['cat_name'];
foreach($v['childs'] as $v){
$output .= $this->categories_tree($v);
}
$output .= '</li>';
} else{
$output .='<li>' . $v['cat_name'] .'</li>';
}
}
}
$output .= '</ul>';
}
return $output;
}
}
$cats = new Categories();
$tree = $cats->cat_tree();
foreach($tree as $k => $v){
if($v['level'] == 0){
echo $cats->categories_tree($k); }
}