显示会话变量

时间:2012-10-04 21:13:28

标签: php session

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

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

  

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中吗?

抱歉没有问题。

谢谢

4 个答案:

答案 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来引用会话中数据库中的购物车,而不是直接在会话变量中存储有关购物车的所有信息。