24. august 2003 - 18:43Der er
16 kommentarer og 1 løsning
Problem med multidimensionelt-array
Jeg har efterhånden rodet godt og grundigt rundt i tingene. Jeg har en hjemmelavet funktion som returnerer et array bestående af samme struktur som katalog strukturen i et bibliotek. Er i med? Dette betyder at arrayet er rimelig dynamisk med hvad angår den egentlig dimension. Mit test-bibliotek danner eksempelvis et array på 10-dimensioner maks.
Mit problem er egentlig i retning af variable variabler.
Jeg generer en almindelig tekst-streng med følgende indhold:
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.
må man få et kig på din funktion, måske en alternativ løsning kan findes - lyder som om du har trukket de store kanoner frem for at ramme den forholdsvist hamløse due
Hele dit directory tree vil være i ét array, for hver post er et directory. Denne post vil være et array, med følgende [level] = hvor dybt er vi [dir] = stien til folderen [folder] = indeholder et array af biblioker i denne folder [files] = indeholder et array af filer i denne folder
Du vil kunne sammenligne [level] værdier for at danne dit træ
Din funktion er super(noget mere kompakt end mit), men mit problem er sådan set ikke det array som det returnerer. Tror jeg ikke.
Problemet ligger i at jeg sender et argument som eksempelvis:
index.php?c=0,5,4.3
Dette betyder at scriptet skal kigge i de forskellige keys i dimensionerne. Altså [0]['DIRECTORIES'][5]['DIRECTORIES'][4]['FILES'][3]. Komma adskiller biblioteker, og efter punktum kommer nummeret på filen. Her har jeg brug for, dynamisk at generere den lange tekst-streng, og herefter klistre den på variabel-navnet.
Tekststrengen er nem nok at fremstille udfra argumentet, men jeg har stadig ikke fundet en løsning til det oprindelige problem.
uden du forklarer hvorfra du får index.php?c=0,5,4.3 (sikkert fra en dirliste hvor du vil udprinte filer) vil den i mit eksempel hedde fx index.php?c=21 hvor du så bruger $fl[$_GET['c']]['dir'] til fx at udskrive dir navnet ?
ok - fik ikke testet din funktion ordentlig. Det er jo meget smartere. Så er har man kun brug for at bruge 1 dimension (og tallet som definerer dybden).
Takker.
Du har tjent de 80 point da jeg tror det virker bedre nu. Men har du en løsning på det oprindelige spørgsmål??
Disse indices: 0,5,4,3 eller bare 21, hvor længe eksisterer de? Der er ingen garanti for at filsystemet afleverer filerne i samme rækkefølge hver gang. Filer kan slettes og tilføjes, og der kan ske andre ting. Det forekommer mig at være en usund måde at gøre det på.
Det jeg prøver at lave er noget jeg har villet prøve længe. Jeg har fundet at det er styrkende at rode med arrays til diverse formål.
Det skal bruges til en form for fil-browser. Jeg vil bare gerne have stien væk fra adresse-linien som et argument. Derfor var min første tanke at jeg kunne parse nogle koordinater til et array om hvilken fil jeg ville have, hvor henne i hvilken dybde osv.
Hvordan usund? Jeg er ikke helt ny i PHP :).
PS: Lad nu vær med at diske op med en funktion i lavede til et stykke franskbrød for 3 år siden, som bare kan det hele. Jeg morer mig ved selv at lave det :).
Hvis din filstruktur er 100% statisk går det vel. Men hvis en fil har nummer 5, og der imellemtiden bliver fjernet eller tilføjet en fil, har den sikkert ikke nummer 5 længere. Det mener jeg med "usund" - franskbrød er ikke usundt *g*
erik >> jeg vil formode en sådan funktion skal køre rent internt i et admin system af en slags - hvorfor det vil være admins med kontrol over maskinen som anvender funktionen - det er ganske korrekt at slettes indhold mellem listen genereres og evt. links klikkes, vil resultatet kunne fejle med noget "dir not found" osv.
intel >> fil browser med at fjerne stien, lyder som en langsom funktion - at du for hver sideskift skal liste alle dirs, filer osv for at udtrække et par enkelte filer. Måske mod_rewrite på Apache kan give dig en pænere sti i adresselinien, uden at det kræver så meget fil gymnastik
Ok med hobby. Så er der bare det tilbage at rækkefølgen for en readdir ikke er deterministisk - det garanteres i hvert fald ikke. Kører serveren en fil-oprydning (manuelt, automatisk, ...) kan du risikere at få forskellige resultater. Du vil sandsynligvis kunne afteste det 100vis af gange, hvor det virker, og så en dag, på et andet/nyt filsystem/OS, så virker det ikke. Nå ja, det var bare hobby.
Jeg hsr fået det til at fungere nogenlunde. Vha. ljweb's funktion er det blevet realistisk at jeg får det til at fungere.
Men problemet ligger i naturen i et katalogstruktur. Ideen er at jeg lister alle filer og mapper i roden - dette vil sige at scriptet har fået indices ?=0,0,0 (level, nummer på mappen, og nummer på fil). Filen er den egentlige destination som bliver vist forneden. Den første fil i mappen bliver vist automatisk. Klikker jeg et mappenavn loades scriptet igen med ?=1,0,0 hvor mappe nummer 0 vises i level 1 - er i med.
På denne måde med designerer jeg en form for koordinat. Men på vej tilbage er der et problem. Hvordan kan i et sub-sub-sub-sub-dir identificere det forrige dirs nummer i den træ-dybde (level), og det forrige ... og det forrige ... osv. Man bliver nødt til at medbringe en history for ens browsing tilbage op i strukturen. En ekstra oplysning er altså nødvendig:
?=2,4,{4,4},3 : level 2, dir nr. 4, {historien til backtrack i strukturen), og fil nummeret.
Det fungerer - men det er langsomt. Jeg kan for sjov skyld poste et link til scriptet, når jeg synes det er færdigt (hvis det har interesse).
PS: Scriptet går udfra at filernes rækkefølge forbliver det samme gennem browsing af katalogstrukturen.
Nå - scriptet fungerer lokalt med IIS - men på 1go.dk kontoen kan jeg ikke få listet nogle filer overhovedet. Noget med rettigheder på filsystemet?
Intel4004
Pointene går til ljweb
Synes godt om
Ny brugerNybegynder
Din løsning...
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.