PHP: эхо Foreach не отображается правильно - PullRequest
0 голосов
/ 30 апреля 2011

Вывод должен выглядеть следующим образом:

1. Yougurt 4 units price 2000 CRC

Но сейчас я получаю это:

item. Y Y unitsYquantity. 3 3 units3code. S S unitsSprice. units

Это скрипт:

    <?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['list'] 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
print_r($_SESSION);

?>

1 Ответ

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

Проблема в том, что вы вложены на 1 уровень глубже в массивы, чем вы думаете.Чтобы прояснить это, $ _SESSION может выглядеть примерно так (непосредственно перед вводом foreach):

array(1) { 
     ["list"] => array(3) {
           ["item"] => string(8) "Pineaple"
           ["quantity"] => int(30)
           ["price"] => int(15000)
     } 
} 

(вы можете использовать методы var_dump ($ var) или print_r ($ var) для просмотра значения:http://php.net/manual/en/function.var-dump.php http://php.net/manual/en/function.print-r.php)

При выполнении итерации по $ _SESSION ["list"] цикл проходит 3 раза. На первой итерации $ key равен "item", $ value - "Pineaple".

echo $key, '. ', $item['item'], ' ', $item['quantity'], ' units', $item['price'];
    "item   .    P                   P                    units   <empty>"

Почему? Строка "item" очевидна, она просто распечатана.

$item['item'] -> 'item' приводится к (int) 0, поэтому первый символ $ item(Pineaple) печатается: P (Примеры правил преобразования string-> int приведены, например, здесь: http://www.php.net/manual/en/language.types.string.php#language.types.string.conversion)

$item['quantity'] -> то же, что и выше

$item['price'] -> поскольку цена намного превышает длину строки, выводится пустая строка: $myvar = "hi"; echo $myvar[12234]; // prints empty string

На каждой итерации вы получаете этот вывод, меняется только первое слово. В конце ставьте echo "<br />"итерации, и вы увидите это.

Надеюсь, это вам немного поможет.

...