[opgelost] submappen in array zetten

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Igor

Igor

12/12/2009 00:40:00
Quote Anchor link
Hallo allemaal,

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
 
PHP hulp

PHP hulp

17/05/2024 00:48:13
 
Gerben Jacobs

Gerben Jacobs

12/12/2009 01:18:00
Quote Anchor link
Ff snel in pseudo-code:

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.
 
Igor

Igor

18/12/2009 20:22:00
Quote Anchor link
Op die manier zat ik ook al een wel beetje te denken, maar men kan 'oneindig lang' subfolders aan blijven maken, net als in windows.

Dus wanneer ik 'begin' met één map, dan begint hij dus met één id.
Dan doe ik:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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...
}
?>


Hoe moet ik verder...???
Gewijzigd op 01/01/1970 01:00:00 door Igor
 
Joren de Wit

Joren de Wit

18/12/2009 20:28:00
Quote Anchor link
Zoals Gerben voordoet, je zult er een functie van moeten maken die uiteindelijk een array met alle folders en subfolders teruggeeft...
 
Igor

Igor

18/12/2009 20:29:00
Quote Anchor link
Ja, dat begrijp ik.
Maar mijn vraag is dus: hoe maak ik die?
 
Loran DP

Loran DP

19/12/2009 08:02:00
Quote Anchor link
En wat is je oplossing, misschien kan je hem delen met ons?
 
Igor

Igor

19/12/2009 13:35:00
Quote Anchor link
Ow, sorry ;)

Dit is de uiteindelijke code geworden:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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;
}

?>
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.