Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Vorfahr und Nachfahrelemente finden

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Vorfahr und Nachfahrelemente finden

    Hallo.

    Ich habe Daten in einem mehrdimensionalen Array vorliegen: EigeneID, ElternID, Dateninhalt.

    Die einzelnen Elemente haben eine einzigartige, zufällig erzeugte ID und verweisen auf ihr Vorfahrelement.
    Die Wurzelelemente haben im Verweis ne 0 stehen.


    Jetzt wird eine URL mit einer Nummer als Übergabeparameter aufgerufen, diese Nummer verweist auf einen bestimmten Datensatz.

    Ich muss dann den kompletten "Baum" aufbauen. Ich muss die Nachfahren des Elementes finden. Die Vorfahren.
    Und vom Wurzelelement aus wieder runter, die anderen Äste des Baumes.

    Ich hab zwar schon abgefangen, aber es ist sehr ineffektiv.

    Ich brauche, um den Baum aufzubauen, n hoch 2 plus x Schleifendurchläufe!
    n ist die Zahl der Datenelemente, x ist die Zahl weiterer Durchläufe (z.B. Zähldurchlauf)
    Bei 200 Elementen brauche ich mindestens 40.000 Durchläufe!

    Und ich habe mindestens 200 Elemente.

    Warum brauche ich so viele Durchläufe? Nunja, ich gehe erst mal hin und springe auf die Wurzel, da ie die ID 0 hat und somit bekannt ist. Dann suche ich das erste Kind mit einem Durchlauf. Datenverarbeitung. Dann nehme ich die ID vom Kind als aktuelle ID, und suche das Erste Kind vom Kind usw. Ist der Pfad zu Ende, gehe ich wieder eine Ebene hoch, und suche da den nächsten.
    Auf diesem Weg baue ich den ganzen Tree auf.
    Bis das ganze steht, dauert. da bei jedem Element noch Fallunterscheidungen dazu kommen.



    Wie programmiert man sowas richtg und besser?


  • #2
    Zitat von e.tech Beitrag anzeigen
    Wie programmiert man sowas richtg und besser?
    XML für die Datenhaltung - das beinhaltet schon das „Feature“, eine Baumstruktur darzustellen.

    Kommentar


    • #3
      In dem Fall habe ich leider kein XML. Das müsste ich dann erst aus den Arraydaten als Zwischenschritt erstellen

      Kommentar


      • #4
        Ich brauche, um den Baum aufzubauen, n hoch 2 plus x Schleifendurchläufe!
        n ist die Zahl der Datenelemente, x ist die Zahl weiterer Durchläufe (z.B. Zähldurchlauf)
        Das ist dann aber ziemlicher Murx.
        Warum brauche ich so viele Durchläufe? Nunja, ich gehe erst mal hin und springe auf die Wurzel, da ie die ID 0 hat und somit bekannt ist. Dann suche ich das erste Kind mit einem Durchlauf. Datenverarbeitung. Dann nehme ich die ID vom Kind als aktuelle ID, und suche das Erste Kind vom Kind usw. Ist der Pfad zu Ende, gehe ich wieder eine Ebene hoch, und suche da den nächsten.
        Auf diesem Weg baue ich den ganzen Tree auf.
        1. Bringe alle Elemente auf eine Ebene (flaches Array), als Schlüssel die Element-ID
        2. Brauchst Du wahrscheinlich noch ein Sortierkriterium innerhalb einer Substruktur. Hast Du noch nicht genannt, welches das ist.
        3. Benutze für die einzelnen Elemente am besten Objekte
        4. Sortiere (oder durchlaufe die Element) absteigend nach Elternelement-ID. Ist natürlich blöd, wenn das ein Zufallsstring und nichts fortlaufendes ist. Wichtig ist, dass im Array ein Kindelement immer vor seinem Elternelement steht. Vielleicht kannst Du auch eine Baumtiefen-Information verwenden.
        5. Beim Durchlaufen: Ordne ein Element seinem Elternelement zu (das kann man über den Schlüssel ansprechen) und lösche das laufende Element anschließend aus dem Array.
        --

        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
        Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


        --

        Kommentar


        • #5
          Flach ist das Array schon, so wie ich das verstanden habe.

          Wenn die vorgeschlagene Sortierung allerdings nicht möglich ist, weil die IDs wirklich keine Reihenfolge hergeben, und du auch sonst kein brauchbares Sortierkriterium hast - dann sehe ich erst mal keine andere Möglichkeit, als das Array mehrmals zu durchlaufen.


          Wo kommt das ursprüngliche Array denn her? Ist das absolut fix vorgegeben, oder könnte man schon bei dessen Aufbau auf eine günstigere Datenstruktur wechseln?

          Kommentar


          • #6
            Hi.
            Ja, Flach ist das Array schon, da ich ja nur eigene ID und ParentID speichere.
            Es handelt sich um die Kern-Struktur der Seite. Für das Photoalbum.

            Die Struktur ist nicht irgendwo in ner Datenbank oder XML Datei verarbeitungsfreundlich gespeichert. Sondern es wird erstellt, indem die Ordnerstruktur im Filesystem durchgegangen wird. Wobei die Filesystem-Ordnerstruktur nicht 1:1 übernommen wird.
            Das ganze soll außerdem nicht "tiefenbeschränkt" sein, und bei neu hochgeladenen Dateien sollen die automatisch mit dabei sein.

            Das ganze wird dann in Baumansicht aufgebaut wie beim "windows Explorer".


            Bei dem Rest der Seite arbeite ich ja mit einem viel einfacheren System.
            Jede Datei hat eine einzigartige ID. Dazu gibts dann noch ne Menü-ID. Die zugehörigen Ebenen-IDs werden auch direkt abgespeichert. Systembedingt werden nur 4 Ebenen unterstützt.
            Änderungen sind sehr schwer von Hand durchzuführen, wenn man z.B. eine Hauptseite umbenennt, müssen bei sämtlichen unter dieser HauptSeite einsortierten Seiten die Zuordnungen umgeschrieben werden.

            Kommentar


            • #7
              Zitat von e.tech Beitrag anzeigen
              Sondern es wird erstellt, indem die Ordnerstruktur im Filesystem durchgegangen wird. Wobei die Filesystem-Ordnerstruktur nicht 1:1 übernommen wird.
              Sondern ...?

              Wenn sich die Vorfahren-Beziehung aus der Verschachtelung des Dateisystems ergibt - dann solltest du die Daten schon beim auslesen aus diesem in eine geeignete(re) Struktur bringen - nicht „flach“, sondern schon entsprechend mehrstufig aufgebaut.

              Kommentar


              • #8
                Du kannst mit einem Schleifendurchlauf dir ein Array als Referenz-Baum erstellen.
                Baumstruktur aus DB in Array abbilden - php bar

                Kommentar


                • #9
                  Hi.
                  Ja, Flach ist das Array schon, da ich ja nur eigene ID und ParentID speichere.
                  Es handelt sich um die Kern-Struktur der Seite. Für das Photoalbum.

                  Die Struktur ist nicht irgendwo in ner Datenbank oder XML Datei verarbeitungsfreundlich gespeichert. Sondern es wird erstellt, indem die Ordnerstruktur im Filesystem durchgegangen wird. Wobei die Filesystem-Ordnerstruktur nicht 1:1 übernommen wird.
                  Das ganze soll außerdem nicht "tiefenbeschränkt" sein, und bei neu hochgeladenen Dateien sollen die automatisch mit dabei sein.

                  Das ganze wird dann in Baumansicht aufgebaut wie beim "windows Explorer".


                  Bei dem Rest der Seite arbeite ich ja mit einem viel einfacheren System.
                  Jede Datei hat eine einzigartige ID. Dazu gibts dann noch ne Menü-ID. Die zugehörigen Ebenen-IDs werden auch direkt abgespeichert. Systembedingt werden nur 4 Ebenen unterstützt.
                  Änderungen sind sehr schwer von Hand durchzuführen, wenn man z.B. eine Hauptseite umbenennt, müssen bei sämtlichen unter dieser HauptSeite einsortierten Seiten die Zuordnungen umgeschrieben werden.
                  Sorry, aber Du machst Null Aussagen, wo nun Deine Struktur/Strukturlogik gespeichert ist.
                  --

                  „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                  Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                  --

                  Kommentar


                  • #10
                    Die Struktur ist im Array selbst gespeichert. Das Array wird in einer PHP Datei definiert und bei der Variablendeklaration mit Werten belegt. und das Array wird mit den Dateinamen aus dem Filesystem ergänzt. Diese PHP Datei wird dann inkluduer.

                    Kommentar


                    • #11
                      Die Struktur ist im Array selbst gespeichert.
                      Dann musst Du dort ansetzen, wo das passiert.

                      Ich habe Daten in einem mehrdimensionalen Array vorliegen
                      Man hat keine Arrays vorliegen. Entweder man hat Sie selbst händisch erstellt oder von jemandem bekommen oder sie werden dynamisch generiert. Mehr möglichkeiten gibt es nicht. „Sie sind da“ ist keine Beschreibung, die irgend jemand hier weiterhilft.
                      --

                      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                      Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                      --

                      Kommentar


                      • #12
                        Danke für eure Antworten.
                        Ich hab mein Script nochmal über den Haufen geworfen und mache es nochmal neu.
                        Es ist zu vermurkst da ist nix mehr zu retten neu machen geht schneller und ist besser.

                        Kommentar

                        Lädt...
                        X