07. august 2005 - 23:53
Der er
13 kommentarer og 1 løsning
Rekursiv function driller
Hej Eksperter, Jeg er ved at lave noget parent-child helvede og PHP driver mig til vanvid. Her ses min mysql tabel som indeholder en rækker foldere. Disse foldere vil jeg så gerne have udtrykt som en sti f.eks /Folder1/Folder2/ +-----------+-------------+------------------+-------+-----------+ | folder_id | folder_name | folder_desc | level | parent_id | +-----------+-------------+------------------+-------+-----------+ | 1 | Folder1 | asdasdasd | 1 | 0 | | 2 | Folder2 | dsfsdfsdf | 1 | 0 | | 3 | Folder3 | dsdfdsf | 1 | 0 | | 4 | Folder4 | sdsfdffdsdfsfdss | 2 | 1 | | 5 | Folder5 | sdasdasd | 2 | 1 | | 6 | Folder6 | sdfsdf | 3 | 4 | | 7 | Folder7 | level7 | 2 | 3 | +-----------+-------------+------------------+-------+-----------+ Her ses min funktion: function show_path($id, $path) { $query_folder = mysql_query(" select this.level, this.folder_name, this.folder_id, this.parent_id from tbl_filetree this where this.folder_id = '$id' "); $folder = mysql_fetch_assoc($query_folder); if($folder['level'] >= 1) { $path = $folder['folder_name'].$path; show_path($folder['parent_id'], $path); } return $path; } Sådan kalder jeg funktionen: echo show_path(7,"/"); Mit output bliver så Folder7/, men det burde vel blive Folder3/Folder7 Hvad gør jeg galt?
Annonceindlæg tema
Cloud & AI
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
08. august 2005 - 01:39
#1
Denne linje skal udenfor if-sætning'en: $path = $folder['folder_name'].$path;
08. august 2005 - 01:44
#2
viser stadig det samme
08. august 2005 - 09:04
#3
Prøv at test denne: function show_path($id, $path) { $query_folder = mysql_query(" select this.level, this.folder_name, this.folder_id, this.parent_id from tbl_filetree this where this.folder_id = '$id' LIMIT 1 "); $folder = mysql_fetch_assoc($query_folder); if($folder['level'] >= 1) { $path = $folder['folder_name'].$path; show_path($folder['parent_id'], $path); } else { $path = $folder['folder_name'].$path; } return $path; }
08. august 2005 - 09:30
#4
Ok - det vil jeg prøve når jeg kommer hjem i aften. Det jeg har lavet burde sådan set virke, rent konceptuelt. Jeg lavede en lille C# program, som gør basalt set det samme (dog uden Db forespøgsel) og her virker det som det skal: class Class1 { [STAThread] static void Main(string[] args) { Console.WriteLine(showPath(3,"/")); Console.ReadLine(); } public static string showPath(int id, string path) { string path2 = path; if(id >= 1) path = showPath(id-1, "/") + path; return path; } } Det virker meget mystisk. Jakobdo - har du en teknisk forklaring på hvorfor din tilføjelse af else-sætningen burde rette op på det?
08. august 2005 - 09:31
#5
Min else skal fange når level er = 0. Du får aldrig path fra level = 0.
08. august 2005 - 09:41
#6
ah, ja... du har vist ret. Jeg vender tilbage ved 16-tiden idag, med resultatet af dit ændringsforslag.
08. august 2005 - 09:42
#7
smid bare et svar med det samme, så jeg kan acceptere hvis alt går vel...
08. august 2005 - 09:44
#8
Svar
08. august 2005 - 16:17
#9
Den viser stadig det samme. Hvis man kigger nærmere på tabellen så kan man se at level 1 er det øverste lag (det er bare lidt svært at se pga indrykninger). Øv. Andre forslag?
08. august 2005 - 16:20
#10
Åhhh... prøv at se her: if($folder['level'] >= 1) { $path = $folder['folder_name'].$path; show_path($folder['parent_id'], $path); } else { $path = $folder['folder_name'].$path; } return $path; skal ændres til: if($folder['level'] >= 1) { $path = $folder['folder_name'].$path . show_path($folder['parent_id'], $path); } else { $path = $folder['folder_name'].$path; } return $path;
08. august 2005 - 16:21
#11
Du kom tættest på svaret jakobdo - så snup du bare pointene. Tak for hjælpen.
08. august 2005 - 17:11
#12
Tak for point!
08. august 2005 - 17:23
#13
Kan jeg på faldrebet lige spørge om en ting? Den skriver folder-ordenen ud i forkerte rækkefølge, nemlig sådan her Folder7/Folder3 Kan du gennemskue hvordan jeg konkatenerer det så rækkefølgende passer?
08. august 2005 - 17:49
#14
glemdet - jeg fandt fejlen
Vi tilbyder markedets bedste kurser inden for webudvikling