如何在PHP中回显动态会话变量?

时间:2010-02-04 09:37:11

标签: php javascript session dynamic echo

订购页面:在此页面上,客户可以选择添加具有不同外语和其他选项的名片订单。

当用户点击按钮添加额外的卡时,javaScript会添加一系列表单字段,为了给它们提供唯一的名称属性,我只是在每个组的名称末尾添加一个计数器变量。字段,所以我可以将它们保存为一组唯一的会话变量,其中每个表单字段具有不同的名称但最后具有相同的计数器编号,因此我知道它们属于一起。

  

这些是我的会话变量   用户提交表单时保存   转到下一页:

     
      
  • $ _ SESSION [quantity1] = 500
  •   
  • $ _ SESSION [language1] =韩国语
  •   
  • $ _ SESSION [quantity2] = 250
  •   
  • $ _ SESSION [language2] =中文
  •   

结帐页面:在此页面上,我希望它能够回显所订购的每张不同卡片的信息。

我试图在结帐页面的会话变量末尾回显出所有会话变量和相同的数字。到目前为止,我正在使用foreach循环来回显所有会话变量,但我试图只回显出名称末尾带有'1'或名称末尾有'2'的变量。等,并将它们组合在一起。

理想情况下,我想要这样的事情:

  

订单#1,
  数量:500,
  卡上的语言:韩语

     

订单#2,
  数量:250,
  卡语言:中文

如何在结帐页面上回显和分组这些动态会话变量?

3 个答案:

答案 0 :(得分:4)

为什么不以这样的方式存储在会话中?

$_SESSION[orders] => array(
  [0]=>array(
     'quantity'=>1,
     'language'=>'Korean'
   ),
  [1]=>array(
    'quantity'=>2,
    'language'=>'Chinese'
   ),
)

然后您在结帐页面上的迭代将很简单

答案 1 :(得分:3)

保存到会话时重新构建会话:

  • $ _ SESSION [order] [1] [quantity] = 500
  • $ _ SESSION [order] [1] [language] = Korean
  • $ _ SESSION [order] [2] [quantity] = 250
  • $ _ SESSION [order] [2] [language] = Chinese

这样您就可以foreach() order使用{{1}}来干净利落地完成任务。

答案 2 :(得分:1)

对字段进行分组相对容易。只需循环遍历它们,最后拉出数字并将它们分组到另一个数组中。

$vars = array();
foreach ($_SESSION as $k => $v) {
  if (preg_match('!\d+$!', $k, $matches)) {
    $number = $matches[0];
    if (array_key_exists($number, $vars)) {
      $vars[$number][$k] = $v;
    } else {
      $vars[$number] = array($k => $v);
    }
  }
}
print_r($vars);

要显示它们,请循环显示$vars并执行您需要执行的操作。如果您希望按特定顺序排序,则可能需要对$vars进行排序。您可能需要对子数组进行排序,以便按特定顺序放置字段。