我想显示所有会话数据但对其有一些控制权。问题是,我无法确切地知道会话中存储的是什么,因为它是来自购物车的数据。
例如,我的会话中有一个变量:
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
grandTotal:70.5
itemCount:4
item_name_1:番茄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:4.5
item_options_3:
item_name_4:Green Leaves Suppe
item_quantity_4:1
item_price_4:3.5
item_options_4:
显然我想让它更容易阅读。
我可以使用echo $ _SESSION ['shipping']运费将其放在我想要的任何地方,但我该如何处理这些产品呢?
说我想让每个产品都显示在div和/ div中吗?
抱歉没有问题。
谢谢
答案 0 :(得分: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'];
}
答案 1 :(得分:0)
你可以使用像这样粗糙的东西:
foreach($_SESSION AS $key => $val)
if (preg_match("/item_name/i", $key)) {
echo $val.'<br>';
}
}
显然,如果匹配成功,你可以处理你所做的事情。这只是为了提出一个想法。
顺便说一句,考虑别人在说什么。如果您控制会话变量,那么最好以更好,更有条理的方式存储它们。这个糟糕的例子可以与你提供的内容一起使用。
答案 2 :(得分:0)
每当你开始问自己“我如何处理变量变量名称?”这是一个很好的迹象表明你正走向错误的方向。如你所见,寻找$_SESSION['item_number_$n']
是困难和不自然的。然而,简单的是循环遍历数组的内容,幸运的是,你可以将它存储在会话中(除了它在页面加载之间如何存在,它只是一个普通的数组)。
也就是说,您只需查看$_SESSION['item_number_5']
,而不是试图找出如何前往$_SESSION['shopping_cart'][5]
。这样可以轻松地遍历项目,计算项目数量,添加项目,删除项目,并且通常更清晰,可以全面使用。
答案 3 :(得分:0)
您无论如何都不应该使用会话变量来存储此类信息。您应该存储一个id来引用会话中数据库中的购物车,而不是直接在会话变量中存储有关购物车的所有信息。