PHP: эхо Foreach ничего не показывает - PullRequest
0 голосов
/ 30 апреля 2011

РЕДАКТИРОВАТЬ

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

 1. Banana 3 Units, Price 350 CRC
2. Yougurt 4 Units Price 2000 CRC
3. etc etc
4. etc

В текущем выводе отображается только последний добавленный элемент.

Это сценарий:

<?php

session_start();

//Getting the list
$list= $_SESSION['list'];


//stock
$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,
  );

//Saving the stuff
$_SESSION['list'] = array(
    'item' => ($_POST['product']), 
    'quantity' => ($_POST['quantity']),
    'code' => ($_POST['code']),
);

//price
$price = $products[($_SESSION['list']['item'])] * $_SESSION['list']['quantity'];

$_SESSION['list']['price'] = $price;


//listing
echo  "<b>SHOPPIGN LIST</b></br>";

foreach($_SESSION as $key => $item) 
{
    echo $key[''], '. ', $item['item'], ' ', $item['quantity'], ' units: ', $item['price'];
}

//Recycling list
 $_SESSION['list'] = $list;

echo "</br> <a href='index.html'>Return to index</a> </br>";


//Printing session
var_dump($_SESSION);

?>

Ответы [ 2 ]

1 голос
/ 30 апреля 2011

Эта строка - ваша проблема.

$_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>";

?>
0 голосов
/ 30 апреля 2011

Вы переопределяете значение $ _SESSION ['list'] только на рассчитанную цену, поэтому при выполнении итерации по $ _SESSION ['list'] единственное, что у вас есть в $ item, - это скалярное значение вычисленной промежуточный итог, а не массив, на который вы надеетесь в комментарии «Сохранение материала».

Если вы просто пытаетесь распечатать массив продукта / количества / кода / цены, это должно сработать:

<?php

session_start() ;

//Stock
$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,
    );  

$_POST['product'] = 'Banana' ;
$_POST['quantity'] = 50 ;
$_POST['code'] = "unknown" ;

//Saving the stuff
$_SESSION['list'] = array(
    'item' => $_POST['product'],
    'quantity' => $_POST['quantity'],
    'code' => $_POST['code'],
    'price' => $products[$_POST['product']] * $_POST['quantity'],
    );  

print_r($_SESSION['list']) ;

//listing
echo  "<b>SHOPPING LIST</b></br>\n";

foreach($_SESSION as $key => $item) {
    echo $key, '. ', $item['item'], ' ', $item['quantity'], ' units ', $item['price']."\n";
}

echo "</br> <a href='index.html'>Return to index</a> </br>";

//Recycling list
$_SESSION['list'] = ''; 
//Printing session
print_r($_SESSION);

?>

Это напечатает этот результат:

list. Banana 50 units 2500
...