Mot: Dreidimensionale Arrays erstellen

Moin, moin,

ich versuche gerade ein dreidimensionales Array zu erstellen, bin mir aber nicht sicher, wie das funzt. Meine bisherigen Versuche sind alle gescheitert :-(

Meine aktuelle Version sieht so aus:

$myArr = array(array(array()),array(array()));

so richtig klappt das aber auch nicht.
Kann mir ein lieber Mensch bitte helfen?

Beste Grüße aus Berlin

Tom

  1. Hallo Tom,

    ich versuche gerade ein dreidimensionales Array zu erstellen, bin mir aber nicht sicher, wie das funzt. Meine bisherigen Versuche sind alle gescheitert :-(

    Meine aktuelle Version sieht so aus:

    $myArr = array(array(array()),array(array()));

    Das erzeugt Dir ein 3D-Array, also das, was Du haben zu wollen scheinst.

    so richtig klappt das aber auch nicht.

    Was heißt "klappt nicht"? Obiger Code funktioniert doch?

    Oder anders: Was genau willst Du denn wirklich erreichen? 3D-Array ist ja eine sehr allgemeine Fragestellung.

    Viele Grüße,
    Christian

    1. Hallo Christian,

      danke erstmal für die flotte Antwort.

      Das erzeugt Dir ein 3D-Array, also das, was Du haben zu wollen scheinst.

      gut zu wissen.

      so richtig klappt das aber auch nicht.
      Was heißt "klappt nicht"? Obiger Code funktioniert doch?

      Wahrscheinlich stelle ich mich im zusammenbasteln der Inhalte noch ein wenig glatt an.

      Oder anders: Was genau willst Du denn wirklich erreichen? 3D-Array ist ja eine sehr allgemeine Fragestellung.

      Ziel des ganzen ist es einer definierten Anzahl von Referenten(2, erste Dimension), zu einer Anzahl an Fragen(meistens 5, zweite Diemension), einzelne Bewertungen und deren Anzahl zuzuordnen(Skala der Bewertungvon 1-10).

      Vielleicht gehe ich mit den drei Dimensionen da etwas zu weit, allerdings war dies die erste Variante, die mir einfiel.

      Beste Grüße

      Tom

  2. Hello,

    mach es doch in kleinen Schritten

    $_dim = array();      # eindimensional

    $_dim[1] = array();   # zweidimensional
    $_dim[2] = array();   # zweidimensional
    $_dim[3] = array();   # zweidimensional

    $_dim[1][1] = array() # dreidimensional
    $_dim[1][2] = array() # dreidimensional

    $_dim[2][1] = array() # dreidimensional
    $_dim[2][2] = array() # dreidimensional

    $_dim[3][1] = array() # dreidimensional
    $_dim[3][2] = array() # dreidimensional
    $_dim[3][3] = array() # dreidimensional

    echo "<pre>\n";
    print_r($_dim);
    echo "</pre>\n";

    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. Hi,

      ich habe jetzt versucht mir das Array mit zwei Schleifen zusammenzubauen:

      $referentenbewertung = array();
        for($o = 0; $o < NUM_REFERENTEN; $o++){
          $referentenbewertung[$o] = array();
          for($m = 0; $m < NUM_REFKATS; $m++){
             $refrentenbewertung[$o][$m] = array();
          }
        }

      allerdings sagt mir:

      echo "<pre>";
      var_dump($referentenbewertung);
      echo "</pre>";

      ,dass es nur zweidimensional ist..

      Beste Grüße

      Tom

      1. Moin!

        allerdings sagt mir:

        echo "<pre>";
        var_dump($referentenbewertung);
        echo "</pre>";

        ,dass es nur zweidimensional ist..

        Ist alles drin gespeichert, was rein sollte? Dann ist die Dimension doch wohl herzlich egal, oder?

        - Sven Rautenberg

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

          habe jetzt mein Array so erstellt:

          $referentenbewertung = array(array(array()));

          dann habe ich auf jeden Fall das Array, was ich brauche und der Inhalt ist auch schon fast komplett drin.

          Vielen Dank für alle Anregungen.

          Beste Grüße

          Tom

          1. Moin!

            habe jetzt mein Array so erstellt:

            $referentenbewertung = array(array(array()));

            Ja, aber wozu das? Damit erstellst du ja kein vollständiges mehrdimensionales Array, sondern ein eindimensionales Array, in dem ein eindimensionales Array steckt, in dem ein eindimensionales Array ohne Inhalt steckt.

            Arrays in PHP sind grundsätzlich eindimensional. Wenn du Arrays auf diese Weise vorerstellen willst, dann mußt du für jedes Element jeder Dimension alle Unterarrays leer anlegen.

            Alternativ - und das dürfte deutlich einfacher sein - reicht es einfach aus, die gewünschten Array-Keys einfach in einer Inhaltszuweisung zu benutzen:

            $bewertung[1][3][5]= 10;

            Fertig.

            - Sven Rautenberg

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

              Alternativ - und das dürfte deutlich einfacher sein - reicht es einfach aus, die gewünschten Array-Keys einfach in einer Inhaltszuweisung zu benutzen:

              $bewertung[1][3][5]= 10;

              Fertig.

              ... was aber nur dann geht, wenn [1][3] nicht schon mit einem Skalar belegt ist.

              [1][3] muss bereits vom typ Array sein, wenn man [1][3][5] auf diese Weise implizit deklarieren will.

              *~*~*~*~*@ Sven
              BTW: nochmal zurück zu unserer Diskussion von neulich:
              Kreuzverkettete Listen sind Bäume, allerdings nicht unbedingt balanciert.
              PHP-Arrays bestehen im ersten Moment aus Listen, da stimme ich zu. Elemente der Liste können aber zu Knoten umfunktioniert werden und dadurch entsteht ein Baum.

              PHP kennt eigentlich nur ein echtes Array. Array of Characters -> String. Nur hier sagt der Index etwas über die Position des Datenwertes in der Menge aus und genau DAS ist die Definition für "Array".

              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.

                BTW: nochmal zurück zu unserer Diskussion von neulich:

                Dass man dir unlängst Bullshit-Bingo-Spielen vorgeworfen hat, hat anscheinend keinen bleibenden Eindruck hinterlassen.

                Kreuzverkettete Listen sind Bäume, allerdings nicht unbedingt balanciert.

                Definiere doch bitte mal, was eine kreuzverkettete Liste sein soll.

                PHP-Arrays bestehen im ersten Moment aus Listen, da stimme ich zu. Elemente der Liste können aber zu Knoten umfunktioniert werden und dadurch entsteht ein Baum.

                PHP-Arrays bestehen ihr gesamtes Leben lang als Liste. Kein Element dieses Arrays kann zu einem Knoten umfunktioniert werden. Also entsteht auch nichts, was irgendwie einem Baum ähnelt.

                PHP kennt eigentlich nur ein echtes Array. Array of Characters -> String. Nur hier sagt der Index etwas über die Position des Datenwertes in der Menge aus und genau DAS ist die Definition für "Array".

                Ja und? Das, was PHP als Datenstruktur "Array" zusammenfaßt, ist in Wirklichkeit ein sortierter Hash mit Array-Eigenschaften - z.B. im Gegensatz zu der Perl-Datenstruktur Hash, die grundsätzlich unsortiert ist.

                Aber was soll diese Erkenntnis jetzt bringen? Es gibt immer noch keine Baumstruktur in der Nähe oder im Inneren irgendeines PHP-Arrays.

                - Sven Rautenberg

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

                  PHP-Arrays bestehen ihr gesamtes Leben lang als Liste. Kein Element dieses Arrays kann zu einem Knoten umfunktioniert werden. Also entsteht auch nichts, was irgendwie einem Baum ähnelt.

                  Wie bezeichnest Du dsa denn dann, wenn in einem Listenelement eine komplette weitere Liste erscheint usw.?

                  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!

                    PHP-Arrays bestehen ihr gesamtes Leben lang als Liste. Kein Element dieses Arrays kann zu einem Knoten umfunktioniert werden. Also entsteht auch nichts, was irgendwie einem Baum ähnelt.

                    Wie bezeichnest Du dsa denn dann, wenn in einem Listenelement eine komplette weitere Liste erscheint usw.?

                    Ein PHP-Array ist ein Array. Daran ist nichts "Liste" - die ist nur das im Hintergrund verwaltende Konstrukt für die Speicherung der Reihenfolge in dieser Datenstruktur - zusammen mit den Hash-Indices für den direkten Zugriff.

                    Ein Array im Array ist ein "Array im Array". Kein Baum.

                    - Sven Rautenberg

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

                      Ein PHP-Array ist ein Array. Daran ist nichts "Liste" - die ist nur das im Hintergrund verwaltende Konstrukt für die Speicherung der Reihenfolge in dieser Datenstruktur - zusammen mit den Hash-Indices für den direkten Zugriff.

                      Ein Array im Array ist ein "Array im Array". Kein Baum.

                      Da fehlte jetzt nur noch "Basta!"

                      ;-((

                      Also gibt es in PHP gar keine Baumstrukturen bei den Daten?
                      In welcher Sprache gibt es denn dann welche und wie sehen sie aus?

                      Was unterscheidet also Listen und Bäume?

                      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!

                        Also gibt es in PHP gar keine Baumstrukturen bei den Daten?

                        Nicht in den von PHP bereitgestellten Variablentypen.

                        In welcher Sprache gibt es denn dann welche und wie sehen sie aus?

                        Alle "niedrigeren" Hochsprachen wie C und Delphi, die u.A. Pointer kennen, erlauben idR das Konstruieren von zur Aufgabe passenden Datentypen. Zum Beispiel von Listen und Bäumen.

                        Was unterscheidet also Listen und Bäume?

                        Bäume: http://de.wikipedia.org/wiki/Baum_(Graphentheorie)#B.C3.A4ume_als_Datenstruktur
                        Listen: http://de.wikipedia.org/wiki/Liste_(Datenstruktur)

                        - Sven Rautenberg

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

                          Also gibt es in PHP gar keine Baumstrukturen bei den Daten?

                          Nicht in den von PHP bereitgestellten Variablentypen.

                          Aber "Arrays" gibt es auch nicht in PHP, auch, wenn sie so genannt werden...
                          http://de.wikipedia.org/wiki/Array
                          Denn für eine Array ist die Anreihung gleichartiger Datenstrukruren notwendig.
                          Aber das habe ich ja schon oft geschrieben.

                          Alle "niedrigeren" Hochsprachen wie C und Delphi, die u.A. Pointer kennen, erlauben idR das Konstruieren von zur Aufgabe passenden Datentypen. Zum Beispiel von Listen und Bäumen.

                          Nur, weil PHP hier die Zeigervergabe und -Beseitigung nebst Speicherplatzbeschaffung und -Rückgabe selber vornimmt, ändert sich doch aber nichts am Aufbau der Datenstruktur.

                          Einen baum zeichnet aus, dass ein Elment (im Normalfall) über genau einen Weg erreichbar ist und dass untergeordnete Elemente nicht angelegt werden können, ohne dass die übergeordneten vorhanden sind. Genauso ist das bei "PHP-Arrays", die ja keine sind...

                          Was unterscheidet also Listen und Bäume?

                          Bäume: http://de.wikipedia.org/wiki/Baum_(Graphentheorie)#B.C3.A4ume_als_Datenstruktur
                          Listen: http://de.wikipedia.org/wiki/Liste_(Datenstruktur)

                          Die Seiten sind mir bekannt.

                          Auch bei nochmaliger Lektüre des gesamten Threads habe ich immer noch den Eindruck, dass wir noch nicht am Ziel sind.

                          Es geht schließlich _auch_ darum, wie man sich "Arrays" in PHP vorstellen sollte, damit man damit zurecht kommt.

                          Sie sind eine Verkettung auch ungleicher Elemente, die jedes entweder Datenlement, oder Knoten sein können. Auch dies funktioniert bei PHP sicher. Versuch doch mal, für ein Element, dass schon einen Skalar trägt, ein Unterlement anzulegen, ohne es vorher zu redeklarieren.

                          $_baum[1][2] = 'Blatt';
                            $_baum[1][2][1] = 'Kastanie';   ## das funktioniert nicht.

                          $_baum[1][2] = 'Blatt';
                            $_baum[1][2] = array();
                            $_baum[1][2][1] = 'Kastanie';   ## das funktioniert

                          Allerdings geht der Skalar dann dabei verloren.

                          Hier endet also die implizite Deklaration von Variablen und ihren Typen.

                          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. Hello,

      Ok auf Wunsch noch verwollständigt und das leere Teil mit Daten gefüllt

      mach es doch in kleinen Schritten

      $_dim = array();      # eindimensional

      $_dim[1] = array();   # zweidimensional
      $_dim[2] = array();   # zweidimensional
      $_dim[3] = array();   # zweidimensional

      $_dim[1][1] = array() # dreidimensional
      $_dim[1][2] = array() # dreidimensional

      $_dim[2][1] = array() # dreidimensional
      $_dim[2][2] = array() # dreidimensional

      $_dim[3][1] = array() # dreidimensional
      $_dim[3][2] = array() # dreidimensional
      $_dim[3][3] = array() # dreidimensional

      $_dim[1][1][1] = "1.1.1";
       $_dim[1][1][2] = "1.1.2";

      $_dim[1][2][1] = "1.2.1";
       $_dim[1][2][7] = "1.2.7";
       $_dim[1][2]['extra'] = "1.2. extra";

      $_dim[2][1]['rot'] = 'grün';
       $_dim[2][1]['blau'] = 'ohne';

      $_dim[2][2][1] = '2.2.1';

      $_dim[3][1][30] = 'Dies';
       $_dim[3][1][35] = 'ist;
       $_dim[3][1][2] = 'eine';
       $_dim[3][1][0] = 'Schweinerei';

      echo "<pre>\n";
      print_r($_dim);
      echo "</pre>\n";

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

      Tom

      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 :-)