2017-07-06 10 views
0

$ _SESSION配列が以下のコードで変更されない理由を教えてもらえますか?オブジェクトは、各レコードのDoNotShipBeforeに日付を入れることです。 $ Row ['DoNotShipBefore']の出力が正しい日付を示しているので、明らかに値をどこかに置いています。しかし、ループが終了すると、ループは完了していないように見えます。

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(); 

出力は次のとおりです。

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)) 

私はセッション内で配列に対処する方法のまわりで私の頭をラップ苦労を抱えているので、実際に任意の助けをいただければ幸いです。

+2

変更するには、$ _SESSION配列を更新していない{ 'foreachの($ _ SESSION [cart_array]など&$行)'へ{ ' – cmorrissey

+0

このライン' foreachの($行として$ _ SESSION [cart_array])。 $行だけを更新します。 –

答えて

4

値がオブジェクトである場合を除いて、変数を割り当てると、値のコピーが作成されます(内部的に効率的にコピーオンライトを使用します)。したがって、$Row$_SESSIONの行のコピーです。オリジナルの配列ではなく、そのコピーを変更しています。

参照変数を使用して、変数の前に&と入力すると、元の配列を参照することができます。

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

ありがとうございました。まだ配列に苦しんでいます...あなたのソリューションと説明に感謝します。 –

1

cart_arrayとは何ですか?おそらく$_SESSION['cart_array']を使用する必要がありますか?すべてのPHPの通知?

+0

その名前の定数がない場合、PHPはそれを文字列リテラルに自動的に変換し、警告が有効になっている場合は通知を表示します。 – Barmar

+0

これは質問に対する答えを提供しません。批評をしたり、著者の説明を求めるには、投稿の下にコメントを残してください。 - [レビューの投稿](レビュー/低品質投稿/ 16634459) –

+0

新しい質問がある場合は、[質問する](https://stackoverflow.com/questions/ask)ボタンをクリックして質問してください。コンテキストを提供する場合は、この質問へのリンクを含めてください。 - [レビューから](/レビュー/低品質の投稿/ 16634459) –

0

実際にセッション配列に任意の値を割り当てることは、コード内に何もありません。

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

しかし、あなたが行っていないので、あなたのセッションは変わりません。

関連する問題