Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> optymalne rozwiazanie - drzewka
rzseattle
post
Post #1





Grupa: Przyjaciele php.pl
Postów: 554
Pomógł: 0
Dołączył: 4.04.2002
Skąd: Tychy

Ostrzeżenie: (0%)
-----


Ostatnio zastanawialem sie nad optymalnem rozwiazaniem dla wyswietlania drzewka. Mam w bazie tabele z grupami ktora poziada kolumne parent_id. Dzieki temu moge dowolnie zagniezdzac gurpy jedne w drugich (najwyzej stoja te z parent_id = 0) .

Teraz pobieram sobie to wszystko z bazy i zastanawiam sie w jaki sposob zformatowac tablice z wynikami aby smarty bez problemu (czytaj duzej ilosci kodu) mi ja wyswielil. Do tej pory mialem cos takiego
Kod
grupa nadrzedna |

                |

                -dzieci |

                        |

                        -dziecko 1 |

                        |          |

                        |          - dzieci...

                        |

                        -dziecko 2 |

                                   |

                                   - dzieci...

No ale taka tablica jest dosyc niewygoda w uzyciu. Chcialem ja miec bardziej plaska. Myslalem nad tym zeby wstawiac ilosc dzieci i tworzyc cos w rodzaju stosu.
Nadzedna -> 4 dzieci -> umiesc na stosie 4 -> dziecko -> ilosc swoich dzieci 2 -> umiesc na stosie 2 ->wyswietlone dwoje dzieci -> zdejmi ze stosu 2 -> dekrementuj zmienna najwyzej na stosie i lec dalej.

Ale jak pewnie zauwazlyliscie to jest niezle kombinactwo winksmiley.jpg , a jak znam zycie to istnieje pewnie jakis banalny sposob. No i wlasnie chcialbym spytc czy ktos takowego nie zna smile.gif ?


--------------------
"Real children don't go hoppity-skip unless they are on drugs."
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
luzik
post
Post #2





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 4.03.2003

Ostrzeżenie: (0%)
-----


w mojej bazie jest tak.. id_kat|nazwa_kat|ojc_kat|
teraz po wczytaniu tabeli do tablicy robie tak.
[php:1:01eb150073]<?php
function petelka($ojciec='0'){
global $drzewo, $synowie, $glebokosc;
$glebokosc++;
foreach ($synowie[$ojciec] as $key => $syn) {
$nowy_ojciec=$syn;
$drzewo[]=array($syn, $glebokosc);
if(!empty($synowie[$nowy_ojciec])){
$this->petelka($nowy_ojciec);
$glebokosc--;
}
}
}

function rekurencja(){
global $synowie, $drzewo, $glebokosc;
$synowie='';
$drzewo='';
$glebokosc='';
$all = new all("dbconnect");
$all->dbconnect();
$katalogi = $all->db->getAssoc('SELECT id_kat, ojc_kat, nazwa_kat FROM kat ORDER BY ojc_kat, poz_kat');
foreach ($katalogi as $id_kat => $ojciec) {
$ojcowie[0]='';
if(!in_array($ojciec[0], $ojcowie)){
$g=0;
$ojcowie[$i]=$ojciec[0];
$i++;
}
$synowie[$ojciec[0]][]=$id_kat;
}
$this->petelka();
$roottree=array('0', '0');
array_unshift($drzewo, $roottree);
$katalogi['0']=array('null', 'Kategorie');
foreach($drzewo as $id){
$naz_drzewo[]=str_repeat("&nbsp ",$id[1]).$katalogi[$id[0]][1];
}
$this->drzewo=$drzewo;
$this->naz_drzewo=$naz_drzewo;
}
?>[/php:1:01eb150073]

to jest przyklad typowej rekurencji ...bez ograniczen na glebokosc
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 13:45