Tobias Hamann: Bäume in php

Hallo,
ich stehe vor dem Problem, dass ich einen Baum in php darstellen und bearbeiten muss.
Ich weiß pointer im klassichen Sinne gibt es in php nicht, aber ist es dennoch möglich speicher 'dynamisch' (php hat ja eine eigene speicherverwaltung, was auch gut so ist^^) zu belegen oder zumindest einen Baum zu simulieren?

Am liebsten wäre es mir, wenn man hier komplett ohne Datenbank auskommt, weil komplexere Abfragen in verbindung mit großen Bäumen sonnst den DB-Layer zu schnell in die Knie zwingen...

Ich bin gespannt ob ihr mir hier weiterhelfen könnt und danke schonmal im Vorraus.

Gruß TsD

  1. Handelt es sich bei den Bäumen um Dateien oder um Daten?

    Eigentlich ist das auch egal, ich kenne die gängige Metode, Bäume in Arrays zu notieren.

    $irgendwas = Array(
        wert1 = Array(
          wert1_1 = Array(
            ...
          ),
          wert1_2 = Array(
            ...
          )
        ),
        wert2 = Array(
          wert2_1 = Array(
            ...
          ),
          wert2_2 = Array(
            ...
          )
        )
    );

    1. Es handelt sich um Daten.
      Danke für deine schnelle Antwort, ich werde es gleich mal versuchen.
      Obwohl ich finde, dass es etwas ungewoht aussieht.

      Gruß TsD

  2. Hello,

    Ich weiß pointer im klassichen Sinne gibt es in php nicht, aber ist es dennoch möglich speicher 'dynamisch' (php hat ja eine eigene speicherverwaltung, was auch gut so ist^^) zu belegen oder zumindest einen Baum zu simulieren?

    Die sogenannten "Arrays" sind in PHP Baumstrukturen
    Sie sind bis zur Speichergrenze dynamisch belegbar und extrem flexibel.
    PHP lebt meiner Meinung nach gerade wegen dieser leistungsstarken "Array"-Funktionen

    http://www.php.net/manual/en/ref.array.php

    Harzliche Grüße vom Berg
    http://bergpost.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

    1. Auch hier nochmal Danke.
      Und wie ich sehe werde ich wohl nicht um Arrays herrumkommen :)

      Gruß TsD

      1. Hello,

        Und wie ich sehe werde ich wohl nicht um Arrays herrumkommen :)

        Die übernehmen aber alles für Dich

        Du musst Dich nicht um new() und dispose(), oder wie auch immer das sonst heißen würde, kümmern.
        Zum Suchen, Einfügen, Löschen in den Bäumen gibt es fertige Funktionen. Also auch hier keine Gefahr, dass was vergessen wird.

        Die Struktur ist natürlich sehr einfach. Es gibt keinen strukturierten Datenbereich. Den musst Du auch als Baum auflösen. Dafür kann man sich aber "Prototypen" basteln.

        Durch Adress-Referenzierung (die gibt es nämlich doch), kann man auch tief im Array versteckte teile auf einen eigenen Bezeichnner mappen. Es ist aber kein wirklicher Zeiger, sondern eine Emulation in der Bezeichnertabelle von PHP, wirkt aber genauso wie ein "Direktzeiger". Daher ist es also egal, wie PHP das intern macht.

        Harzliche Grüße vom Berg
        http://bergpost.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
        Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

    2. Moin!

      Die sogenannten "Arrays" sind in PHP Baumstrukturen

      Da würde ich widersprechen. Es sind Listen.

      Sie sind bis zur Speichergrenze dynamisch belegbar und extrem flexibel.

      Sie sind flexibel, und für alle Anwendungsgebiete, die Listen oder eben Array benötigen, sehr praktisch. Für Problemstellungen, die was anderes benötigen, braucht es dann aber doch wieder entsprechenden Aufwand, damit diese "Arrays" passen.

      - Sven Rautenberg

      --
      "Love your nation - respect the others."
      1. Hello,

        Die sogenannten "Arrays" sind in PHP Baumstrukturen

        Da würde ich widersprechen. Es sind Listen.

        Das musst Du mir bitte etwas näher erläutern.
        Wie sind denn die Listen miteinander verknüpft?

        Harzliche Grüße vom Berg
        http://bergpost.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
        Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

        1. Moin!

          Die sogenannten "Arrays" sind in PHP Baumstrukturen

          Da würde ich widersprechen. Es sind Listen.

          Das musst Du mir bitte etwas näher erläutern.
          Wie sind denn die Listen miteinander verknüpft?

          Listen haben einen definierten Anfang, ein definiertes Ende und dazwischen eine definierte Abfolge ihrer Elemente.

          Und genau das haben die "Arrays" in PHP. Siehe die Funktionen:
          http://de.php.net/reset
          http://de.php.net/prev
          http://de.php.net/next
          http://de.php.net/current

          Als irrelevant betrachte ich es dabei, dass die interne Datenverwaltung von PHP zur Realisierung des wahlfreien, indizierten Zugriffs auf einzelne Elemente Baumstrukturen zu Hilfe nimmt, weil sich diese Struktur dem PHP-Programmierer nicht offenbart und somit ohne Bedeutung ist.

          - Sven Rautenberg

          --
          "Love your nation - respect the others."
  3. Moin,

    Ich weiß pointer im klassichen Sinne gibt es in php nicht, aber ist es

    Die gibts auch in Java nicht wirklich...

    Arrays wurde ja schon abgesprochen. Eine Möglichkeit wäre noch, das ganze mit Klassen/Objekten zu kombinieren.

    Ein Klasse Node, die als Attribut ein Array hat, in dem die Kinder gespeichert sind.

    Das sollte eigentlich ganz gut funktionieren, es sei denn, es sind wirklich große Bäume, mit denen du ans Speicherlimit kommst...

    Gruß

    Stareagle

    1. Moin!

      Arrays wurde ja schon abgesprochen. Eine Möglichkeit wäre noch, das ganze mit Klassen/Objekten zu kombinieren.

      Ein Klasse Node, die als Attribut ein Array hat, in dem die Kinder gespeichert sind.

      Der Objektansatz gefällt mir spontan :) ...

      Das sollte eigentlich ganz gut funktionieren, es sei denn, es sind wirklich große Bäume, mit denen du ans Speicherlimit kommst...

      ... allerdings fressen PHP-Datenstrukturen sowieso wahnsinnig Speicher, so dass man Extremfälle im Zweifel dann doch wieder anders lösen muß.

      - Sven Rautenberg

      --
      "Love your nation - respect the others."