2012-01-22 2 views
7

Я создаю сайт с корзиной покупок. Мне не нужна какая-либо специальная функциональность, поэтому я сама создаю тележку, а не интегрирую любую готовую. Мои продукты не имеют предопределенной цены в базе данных. Цена генерируется динамически на основе значений, введенных пользователем на странице продукта. Таким образом, пользователь выбирает некоторые спецификации, входит в количество и я получаю следующие значения:

Item ID
Количество
Общая цена

Мне нужно хранить эти значения в $ _SESSION переменной, а затем петли над ним, когда это необходимо, чтобы получить результаты и распечатать их в корзине покупок. Проблема в том, что есть много продуктов, и мне нужно сохранить все эти значения (количество, итоговая цена) для выбранного продукта. Тем не менее, как сохранить Item ID, количество и общую цену в переменной $ _SESSION и связать эти значения друг с другом?

Спасибо за помощь.

EDIT: Мой код, реализующий Майкл предложения:

$itemid = $db->escape($_POST['productid']); 
    $itemquantity = $db->escape($_POST['itemquantity']); 
    $totalprice = $db->escape($_POST['totalprice']); 

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

    $_SESSION['items'][$itemid] = array('Quantity' => $itemquantity, 'Total' => $totalprice); 

    var_dump($_SESSION); 
+0

простой многомерный массив сделал. –

+1

'$ _SESSION []' self - массив. вы также можете хранить в нем массивы. – Joseph

ответ

11

Используйте идентификатор элемента в качестве ключа массива, который содержит массив других элементов:

// Initialize the session 
session_start(); 

// Parent array of all items, initialized if not already... 
if (!isset($_SESSION['items']) { 
    $_SESSION['items'] = array(); 
} 

// Add items based on item ID 
$_SESSION['items'][$itemID] = array('Quantity' => $quantity, 'Total' => $total); 
// Another item... 
$_SESSION['items'][$another_itemID] = array('Quantity' => $another_quantity, 'Total' => $another_total); 
// etc... 

И доступ к ним как:

// For item 12345's quantity 
echo $_SESSION['items'][12345]['Quantity']; 

// Add 1 to quantity for item 54321 
$_SESSION['items'][54321]['Quantity']++; 
+0

Спасибо, Майкл! Однако это стирает существующие значения в переменной $ _SESSION. Скажем, я добавил один набор значений с помощью $ itemID = 29, а затем, когда добавляю еще один элемент с переменной $ itemID = 30, my $ _SESSION содержит только последний набор данных. – cycero

+0

@cycero Не так. '$ _SESSION ['items']' - массив. Каждый раз, когда вы добавляете к нему элемент с '$ _SESSION ['items'] [$ newitemID]', вы добавляете в массив, а не перезаписываете предыдущий. –

+0

Когда я делаю простой print_r ($ _ SESSION), он печатает только последний набор значений, а не все. – cycero