2012-05-17 63 views
0

我遇到了一個有點惱人的問題。這是我的PHP代碼。忽略變量來自哪裏。這是爲了購物車的功能,但它適用於許多不同的領域。將值推入數組PHP的正確方法?

$data_set = json_decode(stripslashes($_POST['varA']), true); 
$pid = $pid['product_id']; 
$quantity = $pid['quantity']; 

$_SESSION['cartid'] = $_SESSION['cartid'] + 1; 

$product_data = array("Product_ID" = > $pid, "quantity" = > $quantity, "cartid" = > $_SESSION['cartid']); 

我的問題發生在這個地方的代碼。我首先檢查Session變量是否有一個值,如果沒有,那麼它繼續創建一個關聯數組。

if (empty($_SESSION['cart_items'])) { 
    $_SESSION['cart_items'] = array("items" = > $product_data); 
} else { 
    array_push($_SESSION['cart_items']['items'], $product_data); 
} 


echo json_encode($_SESSION['cart_items']); 

後的第一個項目是 「補充說:」 最後的結果是這樣的:

{ 
    "items": { 
     "Product_ID": "2", 
     "quantity": "1", 
     "cartid": 1 
    } 
} 

然而,經過多次的第一個加法,每個值獲得的關鍵:

{ 
    "items": { 
     "0": { 
      "Product_ID": "2", 
      "quantity": "1", 
      "cartid": 2 
     }, 
     "1": { 
      "Product_ID": "2", 
      "quantity": "1", 
      "cartid": 3 
     }, 
     "Product_ID": "2", 
     "quantity": "1", 
     "cartid": 1 
    } 
} 

我如何防止這些密鑰發生?這可能嗎?如果不是,那麼如何重新編寫密鑰,以便每次都添加密鑰?這是可能的解析和循環通過JS在前端?

對不起,我有這麼多的問題。任何幫助真的很感激。

+1

你想要它看起來像什麼? – deceze

回答

1

在第一次迭代中,$_SESSION['cart_items']是空的,所以你運行這個命令:

$_SESSION['cart_items'] = array("items" => $product_data); 

這將創建$_SESSION['cart_items']['items']但你只用本身的產品來填充它;應該將其定義爲一個陣列,而不是:

$_SESSION['cart_items'] = array("items" => array($product_data)); 

這創建,使用它可以在後面array_push延伸的單個項目的陣列。

說了這麼多,你可以只更換整個條件:

$_SESSION['cart_items']['items'][] = $product_date; 

PHP會自動創建一個空的數組,如果不存在,就,然後加入產品數據作爲下一個元素。

+0

你說得對。哇。那一條線。非常感謝你 :) – TaylorMac

0

這是因爲該行:

$_SESSION['cart_items'] = array("items" = > $product_data); 

你基本上是說,而不是在項目的關鍵在於行「項目」鍵有產品數據。它應該是:

$_SESSION['cart_items']['items'] = array($product_data); 

鍵 - 將始終發生,除非您想要數據覆蓋另一個鍵。如果你不需要密鑰(0,1等),那麼唯一的其他選擇就是合併數據。在這種情況下,它將是:

$ _SESSION ['cart_items'] ['items'] + = $ product_data;

..但我不認爲這就是你想要的。

0

你不需要items,請嘗試下面的方法。

if (empty($_SESSION['cart_items'])) { 
    $_SESSION['cart_items'] = array($product_data); 
} else { 
    $_SESSION['cart_items'][] = $product_data; 
}