从另一个数组存储多维数组,并在foreach循环中调用它


Storing a multidimensional array from another array and calling it in a foreach loop

所以我有一个购物车创建问题,大部分代码都在工作,只是没有调用For each循环的最后部分。我认为问题在于它使用的数组被覆盖了。

正在发生的事情的快速概述

商店商品是由foreachloop创建的(为了避免混淆,我将其称为FOR1),它有多个选项,保存每个FOR1商品信息的数组的创建仅在提交按钮上创建,因为这是将商品添加到购物车的时间。

数据需要存储在会话中。(*启动会话功能已在页面顶部调用)

if(isset($_POST["submit_1"])){
    $color = $_POST['color_select'];
    $size = $_POST['size_select'];
    $price = $_POST['price'];
    $range = $_POST['range'];
    $item_array = array(0 => array('i_color' => $color, 'i_size' => $size, 'i_price' => $price, 'i_range' => $range));
    $_SESSION["item"] = $item_array;
}

然后,购物车检测到一个项目已添加到会话数组中,并相应地显示它。然后,它调用另一个foreach循环(FOR2)中$_SESSION["item"]数组中的任意项目。

if(empty($_SESSION["item"])){
        echo "the cart is empty";
    }
    else{
        foreach($_SESSION['item'] as $key){ 
        echo $key["i_range"]; // this is actually inside a styled div
        echo $key["i_color"]; // this is actually inside a styled div
    }
} 

该代码用于显示submit_1按钮选择的项目,并在整个会话中保持持久性(即离开并返回$session["项目"]停留在数组中的页面)。但是,它只显示1个项目。当再次单击该按钮或单击另一个商店商品时,它只显示该商品,而不会向FOR2功能添加新商品。

我假设问题是每次单击按钮时数组都会被覆盖。或者我误解了提交按钮的功能,因为所有项目都使用submit_1标记。在这种情况下,每次按下提交按钮时,我将如何动态创建一个新的提交按钮?

**我还有一个remove-item函数,它取消设置$item_array,它成功地删除了数组项目,这样购物车就又空了。

更新根据下面的答案,您需要添加的附加步骤是将foreach循环嵌套在另一个foreach循环中。像这样。

foreach($_SESSION['item'] as $key){ 
    foreach($key as $list){
    echo $list["i_color"]; 
    echo $list["i_range"]; 
    }
}

试试这个:

if(isset($_POST["submit_1"])){
  $color = $_POST['color_select'];
  $size = $_POST['size_select'];
  $price = $_POST['price'];
  $range = $_POST['range'];
  $item_array = array('i_color' => $color, 'i_size' => $size, 'i_price' => $price, 'i_range' => $range);
  $_SESSION["item"][] = $item_array;
}