10. januar 2006 - 14:58Der er
16 kommentarer og 1 løsning
Udskrive rekursions funktion, som rulleliste, som på eksperten.dk
Hej.
Jeg skal have udskrevet mine katagorier som her på eksperten (den rulleliste der er når man skal oprette et spørgsmål).
Jeg har fundet dennne her funktion her på eksperten, og lavet lidt om, men tror sku jeg er ved at dumme mig.
p.s. Har ingen anelse om hvordan rekursion fungere.
Sådan ser databasen ud:
CREATE TABLE `catagori` ( `id` int(11) NOT NULL auto_increment, `Parent` decimal(10,0) NOT NULL default '0', `Name` text NOT NULL, `Description` text NOT NULL, PRIMARY KEY (`id`) ) TYPE=MyISAM AUTO_INCREMENT=3 ;
og så min funktion der stinker :-)
<?php include('../mysql.php');
function getMenu($rootId=0,$topLevel=true) { $topul = $topLevel;
static $items = null;
if( $items == null ) { // Load everything $sql = "SELECT * FROM catagori ORDER BY id";
Jeg arbejder på sagen, men jeg bliver hele tiden distraheret :o) Man skal holde tungen lige i munden når man arbejder med rekursive funktioner, så det tager lidt tid.
Hehe, jeg kunne vist lige så godt have hjulpet dig i går. Nu har jeg skrevet den fra bunden (det er lettere at forstå når man selv udtænker skidtet) :o)
Der er faktisk 2 rekursive funktioner; 1 til at konstuere træ-strukturen i et array og en anden til at udskrive kategorierne. De kunne sikkert samles til én, men det har jeg ikke lige overskud til at udtænke :o)
$res = mysql_query('SELECT * FROM catagori ORDER BY id') or die(mysql_error()); while ($row = mysql_fetch_assoc($res)) $items[$row['id']] = $row; mysql_free_result($res);
lige et hurtigt spørgsmål mere.. Hvis jeg nu har denne her side, og skal udskrive menuen to gange, hvordan gør jeg så, kan jeg ikke ligge det hele i en variable, og hvordan gøres dette?
$res = mysql_query('SELECT * FROM catagori ORDER BY id') or die(mysql_error()); while ($row = mysql_fetch_assoc($res)) $items[$row['id']] = $row; mysql_free_result($res);
Jeg smutter til bestyrelsesmøde nu. Du kan selv tage point, for jeg har lidt dårlig samvittighed over at snuppe 200 point for at henvise til et andet spm :o)
Nu tager den jo udgangspunkt i id'et 0, og tager alle katagorier der er undergrupper til 0 (hvilket jo er alle katagorier), hvis den nu i stedet skal tage udgangspunkt i id'et 3, som så fx er Windows::Internet::Fildeling så skal den tage Fildeling, og så alle underkatagorier til fildeling, og alle deres undergrupper osv. Hvordan gøres det?
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.