Dreidimensionale Arrays erstellen
Mot
- php
0 Christian Seiler0 Mot
0 Tom
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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.deTom
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom