Хранение нескольких значений в переменной $ _SESSION с PHP - PullRequest
8 голосов
/ 23 января 2012

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

Идентификатор товараКоличествоИтоговая цена

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

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

РЕДАКТИРОВАТЬ: Мой код, реализующий предложения Майкла:

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

1 Ответ

11 голосов
/ 23 января 2012

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

// 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']++;
...