learnMedlem sedan jan. 20051 130 inlägg Hej, jag lyckas bara inte lista ut hur jag ska göra. Behöver hjälp av ngt snille här på wF!
Det är så att jag har en databas (MySQL) där en massa mappar är lagrade.
Tabellen kan se ut så här:
mappID | ligger_i_mapp | namn
------------------------------------------
1 0 mapp 1
2 0 mapp 2
3 1 mapp 3
4 1 mapp 4
5 4 mapp 5
6 3 mapp 6
7 6 mapp 7
8 0 mapp 8
mappID = mappens unika värde
ligger_i_mapp = ID på den mapp som mappen "ligger i"
namn = mappens namn.
En mapp kan ha ett obegränsat antal undermappar.
Nu vill jag på ett snyggt sätt skriva ut mappstrukturen. Ovanstående exempel ska alltså bli typ såhär:
mapp 1
- mapp 3
-- mapp 6
--- mapp 7
- mapp 4
-- mapp 5
mapp 2
mapp 8
Ja, ni förstår, så som det brukar se ut.
Ungefär hur ska min PHP-kod med sql-querys och loopar se ut?? Snälla hjälp mig i rätt riktning.
Tack så mkt på förhand!! :bire
R: Den här tråden kanske passar bättre i SQL-forumet...?
learnMedlem sedan jan. 20051 130 inlägg Jag blir gaalen, hur jag än vrider och vänder på det så kan jag inte komma på hur jag ska göra..!!?? Det går ju att lösa med hundra loopar, men hur snyggt är det...
Antar att jag tänker i fel banor... Säkert lättare än jag tror.
Finns det ngn där ute som har lust att briljera med sina programmeringskunskaper och sitt logiska tänkande...? :) Tack!
learnMedlem sedan jan. 20051 130 inlägg Godmorgon!
Någon som kan hjälpa mig på traven?
Nått sådant här kanske?
Borde finnas lättare sätt tycker jag men kom inte på nått vettigt :)
<?
$dir[1] = "Mapp 1";
$dir[2] = "Mapp 2";
$dir[3] = "Mapp 3";
$dir[4] = "Mapp 4";
$dir[5] = "Mapp 5";
$inside[1][] = 3;
$inside[1][] = 5;
/*
query("SELECT * FROM tabel");
while(next) {
$dir[mappID] = namn;
$inside[ligger_i_map][] = mappID;
}
*/
function print_dir($index, $count) {
global $inside, $dir;
$current = &$dir[$index];
echo str_repeat("-", $count) . " $current<br>";
$current = NULL;
$inside_me = $inside[$index];
$next_count = $count + 1;
if (is_array($inside_me))
while(list($id, $map) = each($inside_me)) print_dir($map, $next_count);
}
while(list($id) = each($dir)) if ($dir[$id]) print_dir($id, 1);
?>
Resultat:
- Mapp 1
-- Mapp 3
-- Mapp 5
- Mapp 2
- Mapp 4
learnMedlem sedan jan. 20051 130 inlägg Tack Dies_Irae!
Ska genast testa din kod. Fler får gärna komma med förslag! :)
MobergMedlem sedan sep. 200614 inlägg Mmm eftersom du har mappar i mappar så är ju en rekursiv funktion bra ja...
Men det är inte så att du har en fysisk mappstruktur eller så? För vad jag vet så ska man kunna utsmycka dem lite som man vill också. (Alltså såna träd som kommer upp automatiskt i vävläsaren om du surfar in i en mapp utan någon sida som startas automatiskt.)