ďťż
Podstrony
|
telcocafeMam sobie taką tablicę tablicArray ( [0] => Array ( [kierownik] => 2 [podwladny] => 2 ) [1] => Array ( [podwladny] => 1 [kierownik] => 2 ) [2] => Array ( [podwladny] => 3 [kierownik] => 2 ) [3] => Array ( [podwladny] => 4 [kierownik] => 2 ) [4] => Array ( [podwladny] => 5 [kierownik] => 2 ) [5] => Array ( [podwladny] => 6 [kierownik] => 5 ) [6] => Array ( [podwladny] => 7 [kierownik] => 5 ) [7] => Array ( [podwladny] => 9 [kierownik] => 5 ) [8] => Array ( [podwladny] => 8 [kierownik] => 2 ) ) Chcę ją wypisać w taki sposób, z wcięciami: 2 1 3 4 5 6 7 9 8 Gdzie te liczby to pola podwladny. Jest to struktura pracowników, kto komu podlega. Męczę się z tym juz kilka kilka godzin i nie mam na to pomysłu. Niby zwykła rekurencja, ale się zagwoździłem. PS. Oczywiście w chwili dopisania nowych rekordów do bazy, lista ta powinna się na bieżąco aktualizować. Z góry dzięki za wszelkie sugestie. Użytkownik lszk edytował ten post 13 czerwiec 2008, 20:01 Ale powiedz jak wyglada "podleganie". Pole kierownik odnosi sie do numeru klucz glownej tablicy czy jak? i tak samo z podwladnym. //DOWN daj mi chwilke. Użytkownik polasek edytował ten post 13 czerwiec 2008, 23:09 Po kolei. Dane pobieram z tabeli http://img152.images...mployeesaj6.png z pól EmployeeID oraz ReportsTo. W powyższej tablicy EmployeeID odpowiada polu podwladny, a z kolei ReportsTo to kierownik. W polu ReportsTo danego pracownika znajduje się wartość z pola EmployeeID pracownika, który jest jego szefem/zwierzchnikiem/kierownikiem. Moim celem jest otrzymanie tych danych w takiej postaci, jak wyżej napisałem 2 1 3 4 5 6 7 9 8 czyli, po nazwisku i imieniu będzie to Fuller Andrew Davolio Nancy Leverling Janet Peacock Margaret Buchanan Steven Suyama Michael King Robert Dodsworth Anne Callahan Laura Inaczej juz chyba tergo nie umię wyjaśnić. Najpierw układamy odpowiednio elementy a następnie je wyświetlamy. $tablica=Array ( Array ( 'id' => 2, 'parent' => 1 ), Array ( 'id' => 1, 'parent' => 2 ), Array ( 'id' => 3, 'parent' => 2 ), Array ( 'id' => 4, 'parent' => 2 ), Array ( 'id' => 5, 'parent' => 2 ), Array ( 'id' => 6, 'parent' => 5 ), Array ( 'id' => 7, 'parent' => 5 ), Array ( 'id' => 9, 'parent' => 5 ), Array ( 'id' => 8, 'parent' => 2 ) ); function showTabs($tab, $num=0) { $str=''; foreach($tab['childs'] as $element) { $str.=str_repeat(' ', $num).$element['id'].'<br/>'; if(isset($element['childs'])) { $str.=showTabs($element, $num+1); } } return $str; } function uloz(&$tablica, &$elementy) { $ile=count($elementy); for($i=0; $i<$ile; $i++) { if(isset($elementy[$i])) { if(isset($tablica['id'])) { //print_r(array($elementy[$i], $tablica)); if( $elementy[$i]['parent']==$tablica['id'] ) { if(!isset($tablica['childs'])) $tablica['childs']=Array(); $tablica['childs'][]=$elementy[$i]; unset($elementy[$i]); } } else { if($elementy[$i]['parent']==1) { if(!isset($tablica['childs'])) $tablica['childs']=Array(); $tablica['childs'][]=$elementy[$i]; unset($elementy[$i]); } } } } if(isset($tablica['childs'])) { for($i=0; $i<count($tablica['childs']); $i++) { $wynik=array_merge($elementy); uloz($tablica['childs'][$i], $wynik); } } } $wyjscie=array(); uloz($wyjscie,$tablica); echo showTabs($wyjscie); Aktualnie drzewo jest układane z jednej tablicy. Jednakże można je też ułożyć przy pomocy bazy danych (łatwiejsza metoda i przy dużych drzewach efektywniejsza) Użytkownik polasek edytował ten post 13 czerwiec 2008, 23:32 Dzięki bardzo. A jak to zrobić przez bd, to kiedyś tam pokombinuje. Pobierasz elementy ktore maja nie maja rodzica (stworza one glowne galezie). Dla kazdego elementu z galezi glownej wywolujesz funkcje pobierajaca elementy dla ktorych rodzicem jest dany element. Dla dzieci aktualnego elementu wywolujesz znowu ta funkcje i tak w kolko. |
|||
Sitedesign by AltusUmbrae. |