Эта строка - ваша проблема.
$_SESSION['list'] = array('price' => $price,);
Вы устанавливаете переменную, которую вы пытаетесь перебрать, как массив с одной записью в нем, не говоря уже о том, что $price
не будет вложенным массивом, именно поэтому получить item['key']
не удается (так как 'price'
будет вашим ключом, а $price
будет вашим элементом в foreach).
EDIT:
Полагаю, со второго быстрого взгляда вы действительно собираетесь сделать это:
$_SESSION['list']['price'] = $price;
поправьте меня, если я ошибаюсь.
РЕДАКТИРОВАТЬ 2:
На самом деле, повторюсь, я не совсем уверен, что понимаю вашу структуру для вашей $_SESSION['list']
переменной. Похоже, вы хотите что-то вроде:
(('item' => 'Banana', 'quantity' => 1...), ('item' => 'Apple', 'quantity' => 2...))
но то, что у вас есть (исходя из того, на что вы ссылаетесь $_SESSION['list']['item']
), это только:
('item' => 'Banana', 'quantity' => 1...)
у вас тут действительно много проблем. Сначала попытайтесь разобраться с плохой структурой $_SESSION['list']
, затем попробуйте разобраться с циклом foreach.
РЕДАКТИРОВАТЬ 3:
Я все еще не думаю, что вы вполне понимаете, что я имею в виду, поэтому я просто исправлю код так, что, я уверен, вы ищете ...
Я почти уверен, что то, что вы ищете, выглядит примерно так:
<?php
session_start();
$products = array(
'Pineaple' => 500, 'Banana' => 50, 'Mango' => 150,
'Milk' => 500, 'Coffe' => 1200, 'Butter' => 300,
'Bread' => 450, 'Juice' => 780, 'Peanuts' => 800,
'Yogurt' => 450, 'Beer' => 550, 'Wine' => 2500,
);
if(!array_key_exists('list', $_SESSION)){
$_SESSION['list'] = array();
}
$price = $products[$_POST['product']] * $_POST['quantity'];
array_push($_SESSION['list'],
array(
'item' => $_POST['product'],
'quantity' => $_POST['quantity'],
'code' => $_POST['code'],
'price' => $price,
));
echo "<b>SHOPPING LIST</b></br>";
foreach($_SESSION['list'] as $key => $item) {
echo $key+1, '. ', $item['item'], ' ', $item['quantity'], ' units: ', $item['price'];
}
echo "</br> <a href='index.html'>Return to index</a> </br>";
?>