Viennamade: Array erweitern

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

  1. 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

    --
    Wau - hier ist mein Selfcode:
    ss:) zu:) ls:< fo:~ de:] va:) ch:° n4:# rl:( br:< js:| ie:% fl:| mo:|
    [mein alter sah optisch irgendwie besser aus ;-)]
    1. 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

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      1. 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

        --
        Wau - hier ist mein Selfcode:
        ss:) zu:) ls:< fo:~ de:] va:) ch:° n4:# rl:( br:< js:| ie:% fl:| mo:|
        [mein alter sah optisch irgendwie besser aus ;-)]
    2. 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

      1. 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

        --
        Wau - hier ist mein Selfcode:
        ss:) zu:) ls:< fo:~ de:] va:) ch:° n4:# rl:( br:< js:| ie:% fl:| mo:|
        [mein alter sah optisch irgendwie besser aus ;-)]
        1. Hallo!
          ....

          array_push($x["unsinn"], "undschonhastdueinsmehr");
          tada :-)

          ****

          _Danke!_
          Viennamade

          1. 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

            --
            Wau - hier ist mein Selfcode:
            ss:) zu:) ls:< fo:~ de:] va:) ch:° n4:# rl:( br:< js:| ie:% fl:| mo:|
            [mein alter sah optisch irgendwie besser aus ;-)]
            1. 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