Hansi: Neue Variable am Ende eines Array eintragen

Hallo,

ich habe ein kleines Problem bzw. ich weiß nicht wie ich es machen soll?

function in_warenkorb_legen($art_nr, $anzahl)
{
$_SESSION['warenkorb'] = array("Art_Nr=$art_nr&anzahl=$anzahl");

echo $_SESSION['warenkorb'][0];
echo "<br>";
echo $_SESSION['warenkorb'][1];
echo "<br>";
echo $_SESSION['warenkorb'][2];

}

Ich übergebe der Funktion $art_nr, $anzahl und bei jedem Aufruf soll der neue Wert am Ende des array angehangen werden. Ich dachte das würde das Array automatisch machen? Aber es wird mir immer die Postion [0] überschrieben.

Wie schaffe ich es nun das die Variable immer hinter dem letzten Eintrag eingetragen wird?

Gruß Hansi

  1. Hallo,

    mit array_push(); hängt er den wert immer ans ende des Array.

    Aber in deiner Funktion geht dies nicht, weil das Array glaub ich nicht übertragen wird, also überschreibt er immer Wert 0.
    Schreibe in der Funktion den Array Namen dazu

    function in_warenkorb_legen($art_nr, $anzahl, $array)
    {
    $_SESSION['warenkorb'] = array_push($array, "Art_Nr=$art_nr&anzahl=$anzahl");
    ...
    }

    MFG
    Andavos

    --
    http://www.rpgcommunity.de/clanwissen/index.php Webdesign, PHP, Clan-Aufbau und mehr
    1. Hallo,

      mit array_push(); hängt er den wert immer ans ende des Array.

      Aber in deiner Funktion geht dies nicht, weil das Array glaub ich nicht übertragen wird, also überschreibt er immer Wert 0.
      Schreibe in der Funktion den Array Namen dazu

      function in_warenkorb_legen($art_nr, $anzahl, $array)
      {
      $_SESSION['warenkorb'] = array_push($array, "Art_Nr=$art_nr&anzahl=$anzahl");
      ...
      }

      MFG
      Andavos

      Das verstehe ich nicht so ganz wieso ich noch einen Namen vergeben soll wozu?

      Ich möchte doch nur das der neue String in

      $_SESSION['warenkorb'][0];

      $_SESSION['warenkorb'][1];

      $_SESSION['warenkorb'][2];

      $_SESSION['warenkorb'][3];

      geschrieben wird.

      push array scheint glaub nur für assoziative arrays da zu sein!?

      Ich habe es mit push ausprobiert das geht übrigens nicht den name habe ich in der Funktion vergeben.

      Gruß Hansi

      1. Hello Hansi,

        es bringt Dich wahrscheinlich weiter, wenn Du dich vom Wort "Array" in PHP nicht in die Irre führen lässt. Unter Array versteht man ja i.d.R. eine geschlossene Speicherstruktur wiederkehrender Elemente. Die Elmente werden dabei derartig serialisiert, bis sie hintereinander weg in den Speicher geschrieben werden können. Es ist sozudagen die Anreihung von Datenstrukturen (C -> struct, Pascal -> record, ...)

        Das ist bei "Arrays" in PHP nicht so. Das werden diese als eine Art Baumstruktur angelegt.

        Stell Dir eine Kette von Elementen vor, die von einem Anfangspunkt zu einem Endpunkt gespannt wird. Nur diese beiden Punkte sind bekannt. Jeses Kettenelement kennt seinen Nachfolger und seinen Vorgänger. Jedes Element erhält einen Namen (Das ist der Key) und einen Wert(das ist der Value). Außerdem gibt es noch ein paar Verwaltungsfelder, die uns nix angehen.

        <img src="http://bitworks.de/~selfHTML/EinfachesArray500.gif" border="0" alt="">

        Vielleicht verstehst Du nun auch, wieso es egal ist, ob man ein "numerisches Array" oder ein "assoziatives Array" aufbaut. Im Feld für den Namen steht dann beim assoziativen Array eben einfach keine Zahl, sondern ein String. Und das ist auch der Grund, dass einfach Schlüsselwerte fehlen können oder die Schlüssel in der physischen Kette nicht in der passenden Reihenfolge stehen. Um die Kette in in ihrer physischen Reihenfolge (wenn man davon überhaupt sprechen darf, eigentlich ist sie auch nur logisch) ausgeben lassen will, gibt es z.B. die Funktion foreach().

        Nun kann man in das Wert-Feld des Arrays aber nicht nur Skalare eintragen, sondern wieder einen Anfangspunkt für eine neue Kette. Dann hat man ein "Subarray" oder eine zweite Dimension gebaut.

        <img src="http://bitworks.de/~selfHTML/VerzweigtesArray500.gif" border="0" alt="">

        Es wird uns nun aber auch klar, dass nicht jedes Element mehrere Dimensionen haben muss. das unterscheidet "PHP-Arrays" deutlich von denen der klassischen Programmierung.

        Die Subarrays dürfen selber natürlich auch wieder Subarrays besitzen und so weiter...

        Ich hoffe, ich konnte Dir damit helfen.

        Liebe Grüße aus http://www.braunschweig.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
  2. Hallo Hansi,

    $_SESSION['warenkorb'] = array("Art_Nr=$art_nr&anzahl=$anzahl");

    damit löschst du das Array $_SESSION['warenkorb'] und weist ihm eine neues Array mit einem Element zu. Um eine neues Element anzuhängen ohne die alten zu löschen, kannst du
     $_SESSION['warenkorb'][] = 'Art_Nr='.$art_nr.'&anzahl='.$anzahl;
    verwenden. Kombinationen wie "text=$var" solltest du vermeiden, da das wesentlich langsamer, als 'text='.$var ist.

    Grüße aus Nürnberg
    Tobias

    --
    Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
    1. Hallo Hansi,

      $_SESSION['warenkorb'] = array("Art_Nr=$art_nr&anzahl=$anzahl");
      damit löschst du das Array $_SESSION['warenkorb'] und weist ihm eine neues Array mit einem Element zu. Um eine neues Element anzuhängen ohne die alten zu löschen, kannst du
       $_SESSION['warenkorb'][] = 'Art_Nr='.$art_nr.'&anzahl='.$anzahl;
      verwenden. Kombinationen wie "text=$var" solltest du vermeiden, da das wesentlich langsamer, als 'text='.$var ist.

      Grüße aus Nürnberg

      »»
      »»
      »»
      »»
      »»
      »»
      »»
      »»
      hallo Tobias

      Dein Lösungsvorschlag funktioniert!

      Aber was ich nicht verstehe warum meine Version nicht funktioniert hat?

      Schliesslich wollte dem Feld warenkorb wiederum eine array varibale zuweise wo alle Elemete drin stehen.

      Kann man einem Feld im array keine varibale zuweisen die dann in meinem Fall gleich ein neues array entspricht?

      gruss hansi

      1. Hallo Hansi,

        Hallo Hansi,
        [...]
        Grüße aus Nürnberg

        lies bitte mal http://learn.to/quote.

        Schliesslich wollte dem Feld warenkorb wiederum eine array varibale zuweise wo alle Elemete drin stehen.

        nein, du wolltest dem Feld warenkorb ein neues Array mit einem Element zuweisen (siehe auch http://de2.php.net/function.array) - und dabei wird eben der alte Inhalt überschrieben.

        Kann man einem Feld im array keine varibale zuweisen die dann in meinem Fall gleich ein neues array entspricht?

        doch, aber du willst dem Feld keine neue Variable zuweisen, sondern ein Arrayfeld hinzufügen - und das geht eben über $array[] = 'foobar';

        Grüße aus Nürnberg
        Tobias

        --
        Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|