2010-02-04 77 views
0

订单页面:在此页面上,客户可以选择添加具有不同外语和其他选项的名片订单。如何在PHP中回显动态会话变量?

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

这些会话变量我 节约当用户提交表单 去到下一个页面:

  • $ _SESSION [数量1] = 500
  • $ _SESSION [LANGUAGE1] =韩国
  • $ _SESSION [quantity2] = 250
  • $ _SESSION [LANGUAGE2] =中国

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

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

因此理想情况下,我想是这样的:

令#1,
数量:500,
卡上语言:韩语

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

我可以在结帐页面上回显并分组这些动态会话变量吗?

回答

3

重组:

  • $ _SESSION [为了] [1] [数量] = 500
  • $ _SESSION [为了] [1] [语言] =韩国
  • $ _SESSION [为了] [2] [数量] = 250
  • $ _SESSION [为了] [2] [语言] =中国

这样,你可以在使用干净利落。

+0

我喜欢这个主意。我设法按照您的建议保存会话,但我不太清楚如何编写foreach循环以及“order”的含义。我无法在php.net – zeckdude 2010-02-04 10:51:35

+0

'foreach($ _ SESSION ['order'] as order){...}' – 2010-02-04 11:03:03

+0

找到这个函数我想我需要在foreach循环中放入一个foreach循环。谢谢! – zeckdude 2010-02-04 11:15:46

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进行排序。您可能需要对子数组进行排序才能将字段按特定顺序排列。保存到它时,您的会话,而不是

4

为什么不以这种方式存储会话?

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

然后结帐网页上的迭代将是简单