4

我想显示所有会话数据,但可以对其进行一些控制。问题是,我无法确切知道会话中存储了什么,因为它是来自购物车的数据。

例如,我的会话中有一个变量:

item_name_1:产品名称
item_quantity_1:5

每个产品都有一些带有数字的变量。如果购物车中有 2 种不同的产品,则第二个将是

item_number_2 等等。

还有一个名为 itemcount 的变量,它告诉购物车中有多少不同的产品。

我如何告诉 php,所有以 item_name_ 开头的变量都应该显示在所有其他变量(如总价)之后的单个 div 中?

这是我目前用来打印会话数据的:

<?php
foreach ($_SESSION as $key=>$val)
echo $key. ": ".$val. "<br>";
?>

这就是我所看到的:

货币:欧元
运费:10
总计:70.5
itemCount:4
item_name_1:Tomato Suppe
item_quantity_1:1
item_price_1:3.5
item_options_1:
item_name_2:Lentils Suppe
item_quantity_2:14
item_price_2:3.5
item_options_2: item_name_3
:Chicken Suppe
item_quantity_3:1
item_price_3:
_name_4 。
绿叶
供应 item_quantity_4:1
item_price_4:3.5
item_options_4:

显然我想让它更容易阅读。

我可以使用 echo $_SESSION['shipping'] 将其放在任何我想要的地方,但是我如何处理产品?

比如说我希望每个产品都显示在 div 和 /div 中?

对不起菜鸟问题。

谢谢你

4

4 回答 4

2

如果您无法控制数据保存到会话的方式,您可以编写一个简单的帮助函数,以更可用的格式检索产品数据。

function getSessionProducts()
{
  $itemCount = $_SESSION['itemCount'];
  $products = array(); 
  for($i = 1; $i <= $itemCount; $i++) {
     $products[] = array(
       'name' => $_SESSION['item_name_'.$i],
       'quantity' => $_SESSION['item_quantity_'.$i],
       'price' => $_SESSION['item_price_'.$i],
       'options' => $_SESSION['item_options_'.$i]
    );
  }
  return $products;
}

您当然应该添加适当的验证来检查 $_SESSION 数组中的数据是否在访问之前设置。

如下使用它

$products = getSessionProducts(); 
foreach($products as $product) { 
    echo $product['name']; 
} 
于 2012-10-04T21:28:00.983 回答
0

你可以使用像这样粗略的东西:

foreach($_SESSION AS $key => $val)
    if (preg_match("/item_name/i", $key)) {
        echo $val.'<br>';
    }
}

显然,如果匹配成功,您可以随心所欲地处理您所做的事情。这只是提供一个想法。

顺便说一句,考虑一下其他人在说什么。如果您可以控制会话变量,那么最好以更好、更有条理的方式存储它们。不过,这个糟糕的示例可以与您提供的内容一起使用。

于 2012-10-04T21:20:11.240 回答
0

每当你开始问自己“我如何处理变量名?” 这是一个好兆头,你正朝着错误的方向前进。如您所见,寻找$_SESSION['item_number_$n']. 然而,简单的是循环遍历数组的内容,幸运的是,您可以将其存储在会话中(除了它在页面加载之间的持久性之外,它只是一个普通数组)。

也就是说,与其试图弄清楚如何到达$_SESSION['item_number_5'],您只需看看$_SESSION['shopping_cart'][5]。这使得迭代项目、计算项目数量、添加项目、删除项目变得容易,并且通常更干净,可以全面使用。

于 2012-10-04T21:21:15.467 回答
0

无论如何,您不应该真正使用会话变量来存储此类信息。您应该在会话中存储一个 id 以引用数据库中的购物车,而不是将有关购物车的所有信息直接存储在会话变量中。

于 2012-10-04T21:26:02.130 回答