2011-12-08 53 views
0

我得到一個FORM POST,並且在按下(提交)的按鈕時,數據庫中的項目的值(主鍵)($ artid) 。PHP數組將只循環兩行,隨後覆蓋第二行/索引

對於每個POST,我嘗試添加一個新的對象值到映射到由$ artid設置的鍵的數組中,所以它應該是唯一的。該數組被添加到$ _SESSION中以每次都獲得相同的數組。

第一個對象被添加好,但其他對象只是覆蓋數組中的第二個位置。我需要它繼續增長。

代碼:

if (!isset($_SESSION['itemArray'])) { 
    ... 
    $cartArr = array(); 
    $bookitem = new BookItem($artid, $qty, $price); 
    $cartArr[$artid] = $bookitem; 

    $_SESSION['itemArray'] = $cartArr; 

    foreach($cartArr as $key => $obj) { .... } 
} 
else { 
    $cartArr = $_SESSION['itemArray']; 
    if (array_key_exists($artid, $cartArr)) { 
     $cartArr[$artid]->quantity = $qty; 
    } 
    else { 
     $bookitem = new BookItem($artid, $qty, $price); 
     $cartArr[$artid] = $bookitem; 
    } 
    foreach($cartArr as $key => $obj) { ... } 
} 

在此先感謝您的幫助!

回答

1

它看起來不像您在添加新元素後重新設置Session數組。所以下次頁面加載時新的值沒有保存。

你有2種選擇:

1)後,您的foreach設置$_SESSION['itemArray'] = $cartArr;這將節省的任何更改(如會話中加入了新的元素)。

2)指定$cartArr是到$_SESSION['itemArray']的引用,以便於$cartArr所做的任何更改都$_SESSION['itemArray']權後,實際上使你會通過$cartArr =& $_SESSION['itemArray'];做到這一點你else

1

您可以詳細瞭解您的foreach中會發生什麼嗎?你是否將類屬性分配給你的數組?

此外,您可能會嘗試序列化您的數組,然後將其分配給會話值。

如果一切都失敗了,這通常可以幫助我實現我要去的地方錯了:

print_r($cartArr); 

祝您好運!

編輯: 看了另一個答案後,我意識到我也忽略了早期分配會話變量。你需要在你的foreach之後指定,或者像Ben說的那樣 - 你的foreach所做的工作不會結束。 (儘管我仍然會序列化數組)

+2

我改爲使用'的var_dump()'和避風港不回頭。 – Dan