( ( [Id] => 22 [parentId] => 14 [Name] => T2 ) ( [Id] => 14 [parentId] => null [Name] => T1 ) ( [Id] => 43 [parentId] => 22 [Name] => T2 child ) ( [Id] => 42 [parentId] => 14 [leaf] => true ) ( [Id] => 41 [parentId] => null [Name] => T4 ) ( [Id] => 40 [parentId] => null [Name] => T5 ) )
Parametr parentId wskazuje na rodzica wezla. Wartosc null oznacza,ze wezel jest pierwszym poziomem i bedzie dzieckiem root'a (ktory jest tworzony gdzie indziej i tutaj nigdy sie nie pojawi). I teraz pytanie. Jak zamienic to na drzewiasta strukture, gdzie dzieci wezla znajda sie w tablicy children ? :
( [Id] => 14 [parentId] => null [Name] => T1 ( ( [Id] => 22 [parentId] => 14 [Name] => T2 ( ( [Id] => 43 [parentId] => 22 [Name] => T2 child ) ) ) ) )
Walcze z tym juz troche czasu i jak dotad ine udalo mi sie wykombinowac nic co bedzie dzialalo w kazdym przypadku. Znalazlem cos takiego :
); foreach ($arr as $a){ $new[$a['parentid']][] = $a; } $tree = createTree($new, $new[0]); function createTree(&$list, $parent){ foreach ($parent as $k=>$l){ $l['children'] = createTree($list, $list[$l['id']]); } $tree[] = $l; } return $tree; }
Ale w tym rozwiazaniu trzeba podac id pierwszego poziomu ($new[0], ktore u mnie jest null) a calosc mimo wszystko nie buduje poprawnej struktury. Z gory dziekuje za wszelka pomoc bo pehapowiec ze mnie zaden i normalnie zajmuje sie frontendem ale w czasie wakacji roznie to bywa :/