Запись массива в сессию

561
04 февраля 2017, 11:14

Как записать в сессию массив, следующего плана

Array(
    [0] => Array
        (
            [ID] => 2041329
            [NAME] => Apple
            [PRICE] => 49900.00
            [QUANTITY] => 1
        )
    [1] => Array
        (
            [ID] => 2041331
            [NAME] => TV
            [PRICE] => 11800.00
            [QUANTITY] => 1
        ) 

Запись произвожу следующим видом:

 foreach($items as $k => $val){
                $_SESSION['items'] = $val;
            }

Но в сессии оказываются не все значения, подскажите как исправить сею ситуацию

Answer 1

У вас изначально не хватает знаний о том, как устроены массивы в PHP, и что из себя представляет переменная $_SESSION в нем. Как тут уже верно вам заметили, можно просто, безо всяких циклов, написать $_SESSION['items'] = $items;, и после получать сохраненные товары из корзины (или что у вас там за список товаров хранится), перебирая $_SESSION['items'] как массив. Код будет примерно такой:

foreach ($_SESSION['items'] as $item) {
    echo $item['ID'];
    echo $item['NAME'];
    /* ... */
}

если захотите вдруг обратиться напрямую, то это можно будет сделать так:

$_SESSION['items'][0]['ID'];
$_SESSION['items'][0]['NAME'];
/* ... */
$_SESSION['items'][1]['ID'];
$_SESSION['items'][1]['NAME'];
/* ... */

или так:

$arr = $_SESSION['items'];
$arr[0]['ID'];
$arr[0]['NAME'];
/* ... */
$arr[1]['ID'];
$arr[1]['NAME'];
/* ... */

Ссылка для обязательного изучения: http://php.net/manual/ru/language.types.array.php Но вообще советовал бы посмотреть/почитать какие-то обучающие материалы в стиле php for dummies, наверняка узнаете пару неожиданных вещей.

И да, массивы в PHP несколько отличаются от массивов во многих других языках программирования, если не хотите каждый раз наступать на грабли, которые описали здесь - лучше потратить день времени на совет в абзаце выше.

Answer 2

Это происходило потому что вы каждый элемент массива $items записывали в $_SESSION['items'], поэтому туда записовался последний элемент массива.

$_SESSION['items'][] = $val; //вот так правильно, только $_SESSION['items'] заранее нужно объявить пустым массивом

Проще записать их в сессию так:

$_SESSION['stored_items'] = $items;
Answer 3

Так может тоже работать. $_SESSION['items']=$items;

READ ALSO
Две версии PHP на одном сервере

Две версии PHP на одном сервере

Можно ли на одном сервере установить две версии PHP (43

519
Скрипт не работает с файлами при запуске через cron

Скрипт не работает с файлами при запуске через cron

Есть скрипт, который работает с БДСразу после запуска записывает в файл "Идёт обновление", а перед выходом "Обновлено [дата]"

478
Остатки на складе больше 3 месяцев

Остатки на складе больше 3 месяцев

Доброго времени сутокДосталась большая база с данными, и нужно вывести отчет об остатках на складе больше 3 месяцев, не затрагивая структуру...

429