Array erweitern
Viennamade
- php
0 WauWau0 Tom0 WauWau
0 Viennamade0 WauWau0 Viennamade0 WauWau
Hallo liebe Forumsteilnehmer!
Mit $x[]="bla";$x[]="bli" bekomme ich ja einen schönen eindimensionalen Array.
Was aber, wenn ich einen zweidimensionalen Array erzeugen will, ebenfalls ohne Angabe der (zweiten) Dimension, der so aussieht:
$x['unsinn'][0]="bla"
$x['unsinn'][1]="bli"
? Denn $x['unsinn'][]="bla" funktioniert nicht.
Danke für Euer Erbarmen ;-)
Viennamade
Hallo Viennamade,
Mit $x[]="bla";$x[]="bli" bekomme ich ja einen schönen eindimensionalen Array.
ich weiß ja nicht, wer den komischen Syntax $bla[] eingeführt hat, aber ich bleibe doch lieber bei $x = array("bla", "bli"); ...
$x['unsinn'][0]="bla"
$x['unsinn'][1]="bli"
? Denn $x['unsinn'][]="bla" funktioniert nicht.
Tja, da musst du wohl oder übel zu der guten alten lösung übergreifen:
$x['unsinn'] = array();
und dann kannst du lostippen:
$x['unsinn']['noch mehr unsinn'] = "blabla...";
$x['unsinn'][1234567890] = 0987654321;
oder wie wärs mit
$x['unsinn'][0] = array(array(array("bla")));
? *gg* ->
print $x['unsinn'][0][0][0][0]; // returns "bla" ;-)
WauWau
Hello,
ich weiß ja nicht, wer den komischen Syntax $bla[] eingeführt hat
Na, diese Bezeichnung stammt natürlich von mir *gg*
allerdigs in der ausgeschriebenen Form "$_blah['blubb']"
Irgendjemand hat dann das "h" weggelassen. Funktioniert aber bei konsequenter Anwendung des Namens genauso gut.
Na zum Thema zurück:
Man kann in PHP diese wunderbaren Baumstrukturen, die sich Arrays nennen, auch gleich in mehreren Stufen anlegen. Dabei bestehen einige Regeln:
Elemente vom Type NULL (nicht existent) werden angelegt
Elemente vom Type FALSE werden überschrieben
Elemente vom Type STRING, INT, REAL, DOUBLE, etc verhindern die Einrichtung
eines Knotenelementes. Sie werden nur dann überschrieben, wenn sie direkt
angesprochen und redefined werden.
Es ist also möglich, ein "tiefes Array" in einem Zug anzulegen, wenn man weiß, dass der Bezeichner bisher vom Type NULL (= not defined) oder FALSE ist:
$_struct['sub1']['sub2']['sub3']...['subN'] = WERT;
Die Dimensionskette wird von PHP dann automatisch aufgebaut.
Liebe Grüße aus http://www.braunschweig.de
Tom
Hi,
Irgendjemand hat dann das "h" weggelassen. Funktioniert aber bei konsequenter Anwendung des Namens genauso gut.
muss ich doch gleich mal ausprobieren ;-)
$_struct['sub1']['sub2']['sub3']...['subN'] = WERT;
ich glaube jedoch, dass er das nicht will.
WauWau
Hallo WauWau!
Danke für die Antwort! Erlöst mich aber nicht ganz von meinem Problem - wahrscheinlich war meine Formulierung nicht gut.
Das für mich Einfache an $x[]="bla" ist, daß ich die Anzahl der aktuellen Array-Einträge nicht wissen muß. Ich wollte wissen, ob man auch einen zweidimensionalen Array derart einfach erweitern kann? Die von Dir vorgeschlagenen Syntaxvarianten bedingen, daß man die Anzahl der bereits vorhandenen Elemente weiß bzw. in Erfahrung bringt ...
$x['unsinn'][0]="bla"
$x['unsinn'][1]="bli"
$x['unsinn'] = array();
$x['unsinn']['noch mehr unsinn'] = "blabla...";
$x['unsinn'][1234567890] = 0987654321;
oder wie wärs mit
print $x['unsinn'][0][0][0][0]; // returns "bla" ;-)
Letzeres ist --""-- :-)
Danke
Viennamade
Hi,
Das für mich Einfache an $x[]="bla" ist, daß ich die Anzahl der aktuellen Array-Einträge nicht wissen muß.
Ach so, du meinst, dass du "bla" als nächstes element einfach dranhängen kannst? Das habe ich so nicht verstanden, ich dachte, du willst mit $x[] = "bla" ein array kreieren, dessen erstes element "bla" ist. klar, wäre dann wohl besser als $x[count($x)+1) = "bla"; zu verwenden, aber es gibt noch was ganz nettes: array_push($x, "bla"); führt das gleiche durch, hat eben den gleichen effekt, wie im manual auch beschrieben.
Ich wollte wissen, ob man auch einen zweidimensionalen Array derart einfach erweitern kann? Die von Dir vorgeschlagenen Syntaxvarianten bedingen, daß man die Anzahl der bereits vorhandenen Elemente weiß bzw. in Erfahrung bringt ...
Wenn das eben nicht so geht wie es bei dir geht, dann nutze eben array_push:
$x['unsinn'] = array();
....
... mittlerweile weißt du nicht, wieviele elemente $x["unsinn"] hat, willst aber noch mehr unsinn
....
array_push($x["unsinn"], "undschonhastdueinsmehr");
tada :-)
print $x['unsinn'][0][0][0][0]; // returns "bla" ;-)
Letzeres ist --""-- :-)
stimmt - das ist es.
Wauwau
Hallo!
....
array_push($x["unsinn"], "undschonhastdueinsmehr");
tada :-)
****
_Danke!_
Viennamade
Hi,
array_push($x["unsinn"], "undschonhastdueinsmehr");
tada :-)
****
_Danke!_
Ach nur das hast du gesucht? Warum suchst du dann nächstes mal nicht direkt im PHP-Manual?
WauWau
Hallo!
array_push($x["unsinn"], "undschonhastdueinsmehr");
Ach nur das hast du gesucht? Warum suchst du dann nächstes mal nicht direkt im PHP-Manual?
Mh. Ich kannte die Funktion array_push schon zuvor. Mangels PHP-Erfahrung kann ich darin noch nicht gut genug abstrahieren. Vom Beispiel im PHP-Manual - es bezieht sich auf eindimensionale Arrays - auf mein Problem mit mehrdimensionalen Arrays zu schließen, dazu bin ich eben noch nicht fähig.
Für jemanden der im PHP zu Hause ist, schwer vorstellbar, und eben deshalb habe ich gleich bei der Anfrage um Erbarmen gebeten.
Danke nochmals,
Viennamade