Hei!
Aikoinaan kysyin putkassa, miten kannattaisi lähteä rakentamaan puumaistarakennetta, miten luoda tietokanta yms. Hyviä ideoita tulikin ja niiden pohjalta aloin etsimään lisää materiaalia netistä.
Löysinkin hyvän, toiminvan esimerkin josta räätälöin yhdessä jQueryn kanssa itselleni kaipaamani version.
http://phpflow.com/php/how-to-create-dynamic-tree-view-menu/
Tuossa linkki esimerkkiin, jonka nappasin. Kansiorakenne muodostuu juuri kuten pitääkin.
Sain kuitenkin aikaan itselleni toisenlaisen ongelman. Haluaisin koko polun talteen aina kansiolle asti, 0,2,6,15 jne.. Nämä kaipaisin taulukkoontai sessioon. Kunan saisin ne :). Viitsisikö kukaan neuvoa miten minun kannattaa nämä lähteä hakemaan. Olen koittanut ne taulukkoon saada napattua. En kuitenkaan saa logiikkaa ymmärtämään, milloin kyseinen taulukkoonon lopetettava ja milloin aloitettava uudelleen, jotta jokaiselle kansiolle tulee oma polkunsa kokonaisuudessaa. Kiitos
Miksi sinun pitäisi laittaa polku valmiiksi talteen istuntoon? Kun tiedät, missä ollaan, voit selvittää polun helposti silmukalla kulkemalla takaperin juurta kohti.
Tarvitsisin polun toiselle sivulle.
Valittuani valintaruudusta, esim kansion neljä. Siirryn toiselle sivulle, jonne kuljettaisin taulukon mukanani myöhempää käyttöä varten.
Voisitko vielä selittää, mikä tässä on ongelma? Siis mitä tietoa sinulla on ja mitä siitä pitäisi muodostaa?
Yksittäisen paikan polku muodostetaan rekursiolla kätevästi näin:
function polku($p) { return array_merge(juuri($p) ? [] : polku(ylempi($p)), [$p]); } // function juuri($p): palauta, onko $p puun juuri. // function ylempi($p): palauta $p:tä ylempi solmu.
Esimerkki toiminnasta keinotekoisella puulla, jossa i:n lapset ovat 2*i ja 2*i+1:
function juuri($i) { return $i == 1; } function ylempi($i) { return intval($i / 2); } echo "10 @ ", implode(",", polku(10)), "\n";
Puun tulostusvaiheessa taas polkua voi ylläpitää näin:
function tulosta($puu, $polku = []) { $polku[] = $puu; echo $puu, " @ ", implode(",", $polku), "\n"; foreach (lapset($puu) as $lapsi) { tulosta($lapsi, $polku); } } // function lapset($p): palauta $p:n lapset.
Esimerkki toiminnasta keinotekoisella puulla, jossa i:n lapset ovat 2*i ja 2*i+1:
function lapset($i) { return ($i < 5) ? [$i*2, $i*2+1] : []; } tulosta(1);
1 @ 1 2 @ 1,2 4 @ 1,2,4 8 @ 1,2,4,8 9 @ 1,2,4,9 5 @ 1,2,5 3 @ 1,3 6 @ 1,3,6 7 @ 1,3,7
Perehdyn huomenna asiaan paremmin ja ilmoitan jos ongelmia on. Kiitoksia tästä esimerkistä.
Aihe on jo aika vanha, joten et voi enää vastata siihen.