Rekursiver Funktionsaufruf ???
heinetz
- php
Hallo Forum,
ich kämpfe seit gestern mit einer, wie ich dachte simplen Aufgabe.
Sie zermartert mir das Gehirn ;( Vieleicht hat jemand Lust, mir
dabei unter die Arme zu greifen:
Ich versuche diese geschachtelte Liste mit php zu generieren:
------------------------------------------------------------------------
<li id="site_id_0">Root
<ul>
<li id="site_id_1">Europe
<ul>
<li id="site_id_2">Norway
<ul>
<li id="site_id_3">Stavanger</li>
<li id="site_id_6">Bergen</li>
<li id="site_id_7">Oslo</li>
</ul>
</li>
<li id="site_id_8"United Kingdom
<ul>
<li id="site_id_9">London</li>
<li id="site_id_10">Manchester</li>
</ul>
</li>
<li id="site_id_12">Sweden</li>
<li id="site_id_13">Denmark</li>
<li id="site_id_14">Germany
<ul>
...
</ul>
</li>
</ul>
</li>
</ul>
</li>
Die Daten liegen in einer MySQL-Tabelle folgendermassen vor:
-------------------------------------------------------------------------
INSERT INTO structure\_new
( site\_id
, parent\_id
)
VALUES ('1','0'),
('2','1'),
('3','2'),
('6','2'),
('7','2'),
('8','1'),
('9','8'),
('10','8'),
('12','1'),
('13','1'),
('14','1'),
('1141','14'),
('142','14'),
('143','14'),
('15','0'),
('151','15'),
('152','15'),
('153','15'),
('16','0'),
('17','16'),
('18','16'),
('19','0'),
('20','19'),
('21','19'),
('22','19'),
('23','19'),
('24','0'),
('25','0');
Ich erklär kurz den Zusammenhang:
------------------------------------------
In der Tabelle wird zu jedem Listeneintrag ('site_id') definiert,
welcher Eintrag übergeordnetet ist. Beispiel 'Datensatz 1' mit
der 'site_id' = 1 ist Unterpunkt von 'site_id' = 0, 'parent_id' ist
also 0.
Mein Ansatz:
---------------
Ich denke, dass man soetwas wohl mit einer rekursiven Funktion
löst. Versucht habe ich zuletzt das hier:
$structureA = array();
for ($i=0; $i<$structure_SelResltNum; $i++)
{
$structureA[$i] = mysql_fetch_assoc($structure_SelReslt);
}
$i = -1;
function getdataset ($parent_id)
{echo "getdataset(".$parent_id.")\n";
global $i;
global $structureA;
$i++;
$str = "<ul>\n";
while ($i<count($structureA)&&$structureA[$i]['parent_id']==$parent_id)
{
$str.= " <li> - parent:".$structureA[$i]['parent_id']." - site:".$structureA[$i]['site_id']."</li>\n";
if ($structureA[$i]['site_id']==$structureA[$i+1]['parent_id']) $str.= getdataset ($i+1);
$i++;
}
$str.= "</ul>\n";
return $str;
}
$content_str.= getdataset(0);
.... aber es ist wahrscheinlich viel zu kompliziert gedcaht. Jedenfalls
komme ich nicht näher an das Ergebnis heran ;(
tausend Dank demjenigen,
der mir einen guten Tipp gibt !
und schönen Abend noch
heinetz
Hallo,
[...]
Die Daten liegen in einer MySQL-Tabelle folgendermassen vor:
INSERT INTO
structure\_new
(site\_id
,parent\_id
)
VALUES ('1','0'),
('2','1'),
('3','2'),
('6','2'),
('7','2'),
('8','1'),
('9','8'),
('10','8'),
('12','1'),
('13','1'),
('14','1'),
('1141','14'),
[...]
Ich erklär kurz den Zusammenhang:
In der Tabelle wird zu jedem Listeneintrag ('site_id') definiert,
welcher Eintrag übergeordnetet ist. Beispiel 'Datensatz 1' mit
der 'site_id' = 1 ist Unterpunkt von 'site_id' = 0, 'parent_id' ist
also 0.
es sieht so aus, als könnten Dir Nested Sets weiterhelfen.
Freundliche Grüße
Vinzenz