所以我有一个购物车创建问题,大部分代码都在工作,只是没有调用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;
}