0

订单页面:在这个页面,客户可以选择添加不同外语的名片订单等选项。

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

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

  • $_SESSION[数量1] = 500
  • $_SESSION[language1] = 韩语
  • $_SESSION[数量2] = 250
  • $_SESSION[language2] = 中文

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

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

所以理想情况下,我想要这样的东西:

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

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

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

4

3 回答 3

4

Why not store in the session in a manner like this?

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

Then your iteration on checkout page will be simple

于 2010-02-04T09:46:37.373 回答
3

Restructure your session when saving to it instead:

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

That way you can use foreach() on order to get it all cleanly.

于 2010-02-04T09:45:59.307 回答
1

Grouping the fields is relatively easy. Just loop through them all, pull off the number at the end and groups them in another array.

$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);

To display them loop through $vars and do what you need to do. You may need to sort $vars if you want them in a particular order. You may need to sort the sub-arrays to put the fields in a particular order.

于 2010-02-04T09:44:32.880 回答