【问题标题】:How do I echo dynamic session variables in PHP?如何在 PHP 中回显动态会话变量?
【发布时间】:2010-02-04 09:37:11
【问题描述】:

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

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

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

  • $_SESSION[quantity1] = 500
  • $_SESSION[language1] = 韩语
  • $_SESSION[quantity2] = 250
  • $_SESSION[language2] = 中文

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

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

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

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

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

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

【问题讨论】:

    标签: php javascript session dynamic echo


    【解决方案1】:

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

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

    那么您在结帐页面上的迭代将很简单

    【讨论】:

      【解决方案2】:

      改为保存会话时重组会话:

      • $_SESSION[订单][1][数量] = 500
      • $_SESSION[订单][1][语言] = 韩语
      • $_SESSION[订单][2][数量] = 250
      • $_SESSION[订单][2][语言] = 中文

      这样你就可以在order 上使用foreach() 来干净利落地搞定。

      【讨论】:

      • 我喜欢这个主意。我已经设法按照您推荐的方式保存了会话,但我不太确定如何编写 foreach 循环以及您所说的“顺序”是什么意思。我在 php.net 上找不到该功能
      • foreach($_SESSION['order'] as $order) { ... }
      • 我发现我需要在该 foreach 循环中放置一个 foreach 循环。谢谢!
      【解决方案3】:

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

      $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 进行排序。您可能需要对子数组进行排序以将字段按特定顺序排列。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-29
        • 1970-01-01
        • 2015-03-03
        相关资源
        最近更新 更多