2017-07-06 4 views
0

Kann mir jemand sagen, warum das $ _SESSION-Array nicht durch den folgenden Code modifiziert wird? Das Objekt soll das Datum in DoNotShipBefore jedes Datensatzes einfügen. Es setzt den Wert offensichtlich irgendwo hin, da die Ausgabe von $ Row ['DoNotShipBefore'] das korrekte Datum anzeigt. Aber wenn die Schleife fertig ist, scheint es nicht zu geschehen.

session_start(); 
print_r($_SESSION[cart_array]); 
foreach($_SESSION[cart_array] as $Row) {   

     $Row['DoNotShipBefore'] = date("m/d/Y") ; 
     echo "<br>New Value of DoNotShipBefore (From cart_array): ". $Row['DoNotShipBefore'] ; 

} 
print "<br><br>"; 
print_r($_SESSION[cart_array]); 
die(); 

Ausgang folgt:

Array ([0] => Array ([groupId] => 26141 [DoNotShipBefore] => 10/01/2017)) 

New Value of DoNotShipBefore (From cart_array): 07/06/2017 

Array ([0] => Array ([groupId] => 26141 [DoNotShipBefore] => 10/01/2017)) 

// Should be (or what I want is): 
Array ([0] => Array ([groupId] => 26141 [DoNotShipBefore] => 07/06/2017)) 

Ich habe eine harte Zeit mit meinem Kopf Umwickeln wie Arrays innerhalb der Sitzung zu adressieren, so wirklich jede mögliche Hilfe schätzen würde.

+2

Änderung dieser Zeile 'foreach ($ _ SESSION [cart_array] als $ Row) {' auf 'foreach ($ _ SESSION [cart_array] als & $ Row) {' – cmorrissey

+0

Sie aktualisieren $ nicht _SESSION Array. Aktualisieren Sie nur $ row. –

Antwort

4

Mit Ausnahme, wenn der Wert ein Objekt ist, wenn Sie eine Variable zuweisen, erstellt es eine Kopie des Werts (intern verwendet es Copy-on-Write für Effizienz). So ist $Row eine Kopie der Zeile in $_SESSION. Sie ändern diese Kopie, nicht das ursprüngliche Array.

Sie können eine Referenzvariable verwenden, um auf das ursprüngliche Array zu verweisen, indem Sie & vor die Variable setzen.

foreach($_SESSION['cart_array'] as &$Row) {   
+0

Vielen Dank. Immer noch mit Arrays kämpfen ... danke für Ihre Lösung und Erklärung. –

1

Was ist cart_array? Vielleicht sollten Sie $_SESSION['cart_array'] verwenden? Irgendein PHP-Hinweis?

+0

Wenn es keine Konstante mit diesem Namen gibt, konvertiert PHP sie automatisch in ein Zeichenfolgenliteral und gibt einen Hinweis aus, wenn Warnungen aktiviert sind. – Barmar

+0

Dies liefert keine Antwort auf die Frage. Um einen Autor zu kritisieren oder um Klärung zu bitten, hinterlasse einen Kommentar unter seinem Beitrag. - [Aus Bewertung] (/ review/low-quality-posts/16634459) –

+0

Wenn Sie eine neue Frage haben, klicken Sie bitte auf die Schaltfläche [Frage stellen] (https://stackoverflow.com/questions/ask). Fügen Sie einen Link zu dieser Frage hinzu, wenn es hilft, Kontext bereitzustellen. - [Aus Bewertung] (/ review/low-quality-posts/16634459) –

0

Es gibt nichts in Ihrem Code, der tatsächlich Werte im Session-Array zuweist.

$_SESSION['some_var'] = "Some Value"; 

Aber Sie tun das nicht, damit die Sitzung, die Sie haben, unberührt bleibt.

Verwandte Themen