was genau hast du vor? sowohl ein verzeichnisbaum als auch ein array sind hierarchische strukturen in denen du daten ablegen kannst.
also auf die gefahr hin mich hier zu blamieren, post ich trotzdem mal![]()
meine frage: was ist die einfachste art und weise eine art verzeichnisstruktur (also mit wurzel und beliebigen unterverzeichnissen) in arrays abzubilden? bin hier grad mental am abrauchen deswegen (vielleicht täte ne hack-pause gut)
sowas halt:
PHP-Code:$struktur['wurzel]['unterverzeichnis1'][unterverzeichnisvonunterverzeichnis2]['dir3']['subdirvondir3]
gibt's da dann komfortable möglichkeiten unterverzeichnisse hinzuzufügen? die struktur soll beliebig tief sein. zudem müssten die einzelnen verzeichnisse eindeutig identifizierbar sein...Code:wurzel ----unterverzeichnis1 --------unterverzeichnisvonunterverzeichnis2 ----dir3 --------subdirvondir3![]()
was genau hast du vor? sowohl ein verzeichnisbaum als auch ein array sind hierarchische strukturen in denen du daten ablegen kannst.
in eile kam er,
in schwarzem gewand,
aus den tiefen des waldes,
ein einsamer mann, ein geschoepf der freiheit,
ein geschoepf ohne furcht,
doch alle nannten sie ihn nur T O D
ja, deine aussage ist richtig.
nur was ich möchte ist eigentlich nur eine möglichkeit um die verzeichnisse 'virtuell' abzubilden. also soll heissen mithilfe dieses arrays soll es mir später möglich sein dateien (oder was auch immer) einzelnen unterverzeichnissen zuzuordnen.
also solln die daten nicht in dem array ansich liegen, sondern irgendwo anders. das array soll ausschliesslich die struktur repräsentieren.
eigentlich wollte ich das ja db-basiert machen, aber die nested-sets wollen mir einfach nicht innen kopp rein.
Du siehst selber, wie unhandlich die Arrays werden, wenn man immer weiter verschachtelt. Sinnvoller ist hier die Handhabung als Objekt:
Für die Struktur kommt dann eine "Tabelle"PHP-Code:$file=array(
'id' => 1,
'name' => 'xyz',
'isDir' => true,
'parent' => 0,
'rootline' = 0,
'crdate'`=> 1149804000,
);
id - rootline - parent
Das auch hier die Handhabung nicht leicht sind, schau mal unter "nested Sets" - das ist der Fachbegriff für diese Objektschachtelung.
Die vorgestellte Struktur ist nur ein Beispiel.
TYPO3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
hm.. für was steht in deinem beispiel 'rootline'? ansonsten leuchtets mir schon ein und ähnliches hab ich mir auch überlegt. nur das nested sets model sehe ich in deinem beispiel nirgends..
nur wie gesagt rootline ist für mich grad nen bischen nichtssagend![]()
mir rootline ist die Verzeichnistiefe gemeint.
TYPO3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
hmm, aber da kommt man doch um rekursive abfragen nicht rum wenn man dein beispiel in ein rdbms kippen würde![]()
was ist parent? int, string?
momentan stell ich mir das so vor:
Code:root(id->0,parent->??,rootline->0) -dir1(id->1,parent->0,rootline->1) --dir2(id->2,parent->1,rootline->2) ---dir3(id->3,parent->2,rootline->3) -dir4(id->4,parent->0,rootline->1)
Geändert von Daniel N. (08.04.2006 um 21:56 Uhr)
hm, ich denke, man kann um eine rekursivität nicht herumkommen, da man vorher ja nicht weiß, wie tief die verzeichnisstruktur sein wird!!
also parent ist die ID des Vaterobjektes, 0 hat keinen Vater. Man kann sich also so an den parents nach oben "hangeln"
ID's sind immer int.
Du siehst, es lässt sich sehr gut in einer DB abbilden, leicht zu sortieren etc.
TYPO3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
ja, aber abfragen lässt es sich nicht leicht. da muss man ja extremst viele querys abgeben um sich da "hochzuhangeln"
nein, sollte eigentlich nicht sein. ich denke, 1 query reicht (ein extrem komplizierter). schau dir mal nested sets an! das sind auch solche bäume, sind extrem schwere aber gute queries! (lass mich auch gerne berichtigen, falls das falsch ist, was ich sagte)
hah, nach einigem grübeln bin ich wohl zu einer lösung gekommen:
so kann man mit einem left join bequem files auslesen die in einem n-tiefen baum liegen.Code:tabelle struktur: dir_id || dirname || parent_id || depth || ---------------------------------------- 1 || images || 0 || 0 || ---------------------------------------- 2 || gif || 1 || 1 || ---------------------------------------- tabelle objekte: obj_id || obj_name || parent_id || depth || ------------------------------------------ 044 || bla.gif || 2 || 1 ||
das hinzufügen eines verzeichnisses oder objektes scheint halt nur mit 2 statements zu funktionieren.. naja, solangs nur 2 sind
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)