Arrays dynamisch erzeugen

D

di-five

Hallo,

ich versuche gerade einen Warenkorb zu programmieren.
Bisher sieht es wie folgt aus:

PHP:
<?php
    if($_SESSION['a01'])
    {
        if($_SESSION['a02'])
        {
            if($_SESSION['a03'])
            {
                echo "Der Warenkorb ist bereits voll.<br />";
            }
            else
            {
                $_SESSION['a03'] = $_GET['heft'];
                echo "Der Warenkorb ist nun voll.<br />";
            }
        }
        else
        {
            $_SESSION['a02'] = $_GET['heft'];
        }
    }
    else
    {
        $_SESSION['a01'] = $_GET['heft'];
    }
    
    $_SESSION['warenkorb'] = array($_SESSION['a01'], $_SESSION['a02'], $_SESSION['a03']);
    
    echo $_SESSION['warenkorb'][0] . "<br />";
    echo $_SESSION['warenkorb'][1] . "<br />";
    echo $_SESSION['warenkorb'][2] . "<br />";
?>

Meine Frage ist jetzt, ob man Arrays dynamisch erzeugen kann.

So ganz blicke ich bei den Arrays noch nicht durch,
aber in obigem Code kann man Den "Artikel" ja nur speichern,
wenn ein leeres Array dafür vorhanden ist.

Kann man die Arraygröße dynamisch vergrößern,
oder muss man wenn man die Artikel in einem Array speichert
so viele Arrays zur Verfügung stellen, wie man max Artikel in den
Warenkorb legen können soll?

Ich freue mich über Antworten und gegebenenfalls kurze Vorschläge :)

Viele Grüße
di-five
 
Du kannst neue Elemente einfach an ein Array anfügen, dafür gibt es verschiedene Optionen:
PHP:
$array = array();

$array[] = "Erstens"
$array[] = "Zweitens";

print_r($array);

$array = array();
array_push($array, "Erstens", "Zweitens" /*usw...*/);

print_r($array);

Schau dir doch mal die Dokumentation zu Arrays an.
 
Hi mAu,

vielen Dank für deine Antwort!

Neue Elemente an das Array anfügen ist eine gute Idee!

Ich mache das dann vorerst so:

PHP:
$id         = array("id0", "id1");
$anzahl     = array("4"  , "8"  );

$warenkorb  = array("ID" => $id, "AN" => $anzahl);

echo "Anzahl: " . $warenkorb["AN"][1] . "<br>";
echo "ID: "     . $warenkorb["ID"][1];

array_push($id    , "id2");
array_push($anzahl, "5"  );

echo "<br /><br />";

$warenkorb  = array("ID" => $id, "AN" => $anzahl);

echo "Anzahl: " . $warenkorb["AN"][2] . "<br>";
echo "ID: "     . $warenkorb["ID"][2];

Die Elemente kann ich ja dann theoretisch in einer Schleife ausgeben,
und statt [0], [1], [2] etc. dann eine Schleifenvariable einfügen,
die sich immer um 1 erhöht.

Die Frage ist nur, warum die zwei Arrays in ein Array packen :P

Vielen Dank für deine Hilfe,

das hat mir auf jeden Fall erst mal weitergeholfen!

Gruß di-five
 
Zuletzt bearbeitet von einem Moderator:
Ich würde das etwas anders machen und statt zwei Arrays für IDs und Anzahl ein mehrdimensionales Array benutzen:
PHP:
$cart = array();

$firstItem = array("ID" => 0815, "Anz" => 1);
$cart[] = $firstItem;

$secondItem = array("ID" => 4711, "Anz" => 25);
$cart[] = $secondItem;

// Iteration über Warenkorb z.B. mit foreach
foreach($cart as $currentItem)
{
   echo "ID: " + $currentItem['ID'];
   echo "Anzahl: " + $currentItem['Anz'];
}
 
Hi m0rb,

deine Lösung gefällt mir sehr gut.

Vielen Dank für dein Post!

So sieht der Warenkorb bisher aus:

PHP:
    if($_GET['action'] == 'add')
    {
        $_SESSION['warenkorb'][] = array("ID" => '08', "Anz" => '5');
    }


    if($_SESSION['warenkorb'] != '')
    {
        foreach($_SESSION['warenkorb'] as $_SESSION['currentItem'])
        {
            echo "ID: "     . $_SESSION['currentItem']['ID'];
            echo "Anzahl: " . $_SESSION['currentItem']['Anz'];
            echo "<br />";
        }
    }

Gruß di-five
 
Zuletzt bearbeitet von einem Moderator:
Da die ID eindeutig ist, kannst du diese auch gleich als Schlüssel des Arrays verwenden. Der Vorteil: Der Zugriff auf ein bestimmtes Elemente ist schneller, da dieses direkt an der ID identifiziert werden kann (daher ja der Name), und die Menge der gespeicherten Daten bleibt minimal.
 
Hi Gumbo,

danke für den Tipp! Ich habe mir noch keine Gedanken gemacht, wie ich auf den Schlüssel des "Artikels" im "Warenkorb" direkt zugreifen kann,
aber ich werde diese Information in Erinnerung behalten, und versuchen sie anzuwenden, wenn ich an dem Problem angelangt bin :P

Als nächstes muss ich jetzt erstmal ein Formular erstellen, in dem man die gewünschte Anzahl in ein Textfeld schreiben kann. Dann sollte man die Artikel im Warenkorb bearbeiten und löschen können.

Ich kann mir vorstellen, dass der Zugriff auf den Artikel via Schlüssel sinnvoll sein kann, muss aber erst gucken, wo ich mich im Quellcode befinde, wenn ich da angelangt bin.

Ich poste den Code nochmal, wenn ich die Funktionen "hinzufügen", "bearbeiten" und "löschen" eingebaut habe, oder ich ein Problem habe, dass ich nicht gelöst kriege. Weil die Funktionen oder so können ja theoretisch auch noch in Klassen verpackt werden. Das wollte ich bei dem Projekt auch mal ausprobieren :D

Den OOP-Link aus einem anderen aktuellen Thread hier habe ich gefunden und schon angelesen, mal gucken, ob das klappt :)

Viele Grüße
di-five
 
Zurück