[opgelost] submappen in array zetten
Ik zit met een probleem waarvan ik niet kan bedenken hoe dat ik dat goed moet oplossen.
Wat ik heb:
Ik heb een database met daarin de tabel 'mappen'.
Deze tabel bevat onderandere de velden: id, parent, en naam (deze hebben denk ik geen uitleg nodig).
Voorbeeld van databasestructuur:
map: id: 4; parent: 0; naam: documenten
map: id: 6; parent: 4; naam: werk-documenten (submap van documenten)
map: id: 7; parent: 6; naam: offertes (submap van werk-documenten)
Wat ik wil:
Ik wil dat als ik het id van een bepaald map geef, dat hij vervolgens alle submappen hiervan (dus ook de submappen van de submappen) in een array zet.
het id van die bepaalde map komt binnen in een php functie:
public function loadSubFolders($mapid)
{
?...?
}
Weten jullie hoe ik det beste kan oplossen?
Alvast bedankt.
Gewijzigd op 01/01/1970 01:00:00 door Igor
getFoldersByParentId() -> geeft alle folders waar parent Id = etc
loadSubFolders($mapid) {
mappen = getFoldersByParentId($mapid)
maparray[] = mappen[0]
if mappen[0] is array -> getFoldersByParentId($mappen[0])
}
Recursive Loopen noemen ze dat.
Je hebt een functie die alle mappen met een bepaald ID ophaalt. Voor elke map ga je kijken of deze een array terug geeft (duidt er dus op dat er submappen zijn) dan roep je die functie weer aan, zo niet, dan zet je hem gewoon in je result array.
Dus wanneer ik 'begin' met één map, dan begint hij dus met één id.
Dan doe ik:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
$sql = 'SELECT id FROM mappen WHERE parent = "'.$id.'" ';
$result = mysql_query($sql);
while($row = mysql_fetch_array($result))
{
$map = $row["id"];
// maar als ik nu deze functie weer herhaal om de submappen van deze map op te halen, dan ben ik de rest van de gegevens die ik nu in de while doorloop, weer kwijt...
}
?>
$sql = 'SELECT id FROM mappen WHERE parent = "'.$id.'" ';
$result = mysql_query($sql);
while($row = mysql_fetch_array($result))
{
$map = $row["id"];
// maar als ik nu deze functie weer herhaal om de submappen van deze map op te halen, dan ben ik de rest van de gegevens die ik nu in de while doorloop, weer kwijt...
}
?>
Hoe moet ik verder...???
Gewijzigd op 01/01/1970 01:00:00 door Igor
Zoals Gerben voordoet, je zult er een functie van moeten maken die uiteindelijk een array met alle folders en subfolders teruggeeft...
Maar mijn vraag is dus: hoe maak ik die?
En wat is je oplossing, misschien kan je hem delen met ons?
Dit is de uiteindelijke code geworden:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
function loadFolders($map)
{
$sql = 'SELECT id, naam FROM mappen WHERE parent = "'.mysql_real_escape_string($map).'" ';
$result = mysql_query($sql);
while($row = mysql_fetch_array($result))
{
$output[$row["id"]] = loadFolders($row["id"]);
}
return isset($output) ? $output : FALSE;
}
?>
function loadFolders($map)
{
$sql = 'SELECT id, naam FROM mappen WHERE parent = "'.mysql_real_escape_string($map).'" ';
$result = mysql_query($sql);
while($row = mysql_fetch_array($result))
{
$output[$row["id"]] = loadFolders($row["id"]);
}
return isset($output) ? $output : FALSE;
}
?>