Mitenkä voisin tulostaa sellaisen taulukon, jonka rakenne on todella heikosti määrätty etukäteen. Oikeastaan muuta taulukosta ei tiedetä varmaksi kuin että siinä on juuri.
Tarkoitan siis tämän tyylistä taulukkoa:
$alitaso1 = array("Juupatijuu", "Jepsistä joo"); $alitaso2 = array("Hilipatihippa"); $juuri[] = $alitaso1; $juuri[] = $alitaso2;
Taulukko voisi myös haaraantua ihan mistä tahansa, vaikka alitaso2:sta lähtisi 3 alihaaraa lisää.
Esimerkin taulukko pitäisi saada tässä muodossa ruudulle, sisentäen aina rivejä sitä mukaan, mitä syvempi taso se on:
Juuri Alitaso 1:n arvot tällä rivillä Tällä rivillä voisi taas olla alitaso1:n ensimmäinen alitaso Tällä rivillä voisi olla alitaso 1:n toinen alitaso Alitaso 2:n arvot tällä rivillä
Melko sekava kysymys varmaan, mutta jospa tuo selviäisi. ;)
Tarkoitatko tällaista mekanismia?
<?php function tulosta($puu, $syvyys) { foreach($puu as $lehti) { if (is_array($lehti)) { tulosta($lehti, $syvyys + 1); } else { echo str_repeat("\t", $syvyys); echo $lehti . "\n"; } } } $taso1 = array("TASO 1", "avain", "banjo"); $taso21 = array("TASO 2:1", "cembalo", "donitsi", "etana"); $taso22 = array("TASO 2:2", "fakiiri"); $taso2 = array("TASO 2", $taso21, "gepardi", $taso22); $juuri = array("JUURI", $taso1, $taso2); echo "<pre>"; tulosta($juuri, 0); echo "</pre>"; ?>
Esimerkin tulostus:
JUURI TASO 1 avain banjo TASO 2 TASO 2:1 cembalo donitsi etana gepardi TASO 2:2 fakiiri
Rekursiivinen funktio on todella näppärä tällaisten puurakenteiden käsittelyssä.
Tuo muuten voisi olla suunnilleen mitä haen. Kiitti! :)
Noniin, nyt tuli vielä samantapainen kysymys mieleen, joten pistetään jatkoa tähän samaan ketjuun vaikka.
Eli mitenkä voisin koota dynaamisesti tällaisen puurakenteisen taulun, jonka Antti tuossa ylempänä neuvoi?
Minulla on käytettävissä taulukkoja, joiden sisällä on tauluja. Nämä pitäisi saada jossain luupissa menemään juuritauluun niin, että aina uusi taulu lisätään alhaisimpaan tauluun jatkeeksi.
Alla on vielä kuvaus tilanteesta:
$tauluja[] = $jokutaulukko1; $tauluja[] = $jokutaulukko2; // ... näitä vaikka kymmenen ihan samanlailla $taulupuu; for ($i=0; $i<count($tauluja); $i++) { // $taulupuu = ? // Tässä pitäisi kerätä taulut niin, että uusi taulu tulee aina viimeksi lisätyn taulun alitauluksi }
Eli lopputuloksen pitäisi olla tämän tyylinen:
taulupuu jokutaulukko1 jokutaulukko2 // ...
Luo puurakenne tällä tavalla:
$taulut[] = array("avain"); $taulut[] = array("banjo"); $taulut[] = array("cembalo"); $taulut[] = array("donitsi"); $taulut = array_reverse($taulut); $juuri = array(); foreach($taulut as $taulu) { $juuri = array_merge($taulu, array($juuri)); }
Tässä puuta aletaan koota alimmasta tasosta lähtien, minkä vuoksi taulukko täytyy kääntää aluksi.
Aihe on jo aika vanha, joten et voi enää vastata siihen.