显示动态变量值

时间:2011-09-06 19:27:58

标签: php webforms variable-variables

我有一个表格,最终会创建一个以管道分隔的文本文件。表单包含多行,每行包含多个名为1_cat[]2_cat[]3_cat[]等的下拉字段。

在表单提交脚本中,我有:

if ($submit) {
   foreach($_POST['videofile'] as $row=>$item)
   {
      $videofile = $_POST['videofile'][$row];
      $videotype = $_POST['videotype'][$row];

      for($i=0; $i<=$drop_fields; $i=$i+1) {
         $val = $i."_cat[".$row."]"; // HERE'S WHERE I'M HAVING DIFFICULTY
         $cat = $cat.$val.",";
      }
      print "$videofile|$videotype|$cat";
      $cat = "";
   }
}

下面的代码会输出1_cat[0],2_cat[0],3_cat[0]1_cat[1],2_cat[1],3_cat[1]等 - 所以它会显示名称,但不会显示我想要的变量值。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

通常,如果$val包含您要引用的变量的名称$$val将为您提供该变量的。在您的情况下,由于您也在索引数组,因此编写它会稍微复杂一些。

您需要更改

$val = $i."_cat[".$row."]"; // HERE'S WHERE I'M HAVING DIFFICULTY
$cat = $cat.$val.",";

$val = $i."_cat";
$cat = $cat.${$val}[$row].",";

有关所有详细信息,请参阅variable variables上的PHP文档部分。

此外,变量名称不能以数字开头,因此您需要稍微调整命名方案。

更新:修复了代码(索引到数组中稍微复杂一点),添加了变量名称注释。

<强> See it in action

答案 1 :(得分:1)

此代码段中有几件事需要更正:

valid variable name以字母或下划线开头,后跟任意数量的字母,数字或下划线。 1_cat不是有效的变量名称。如果您希望将表单字段用作变量名,则需要更改表单中的字段名称。

videofile需要$$videofile

for循环计数器可以这样递增:$i++。这比$i=$i+1更清晰,更标准。

$cat = $cat.$val.",";行在初始化之前使用$cat。您应该在循环开始之前为$cat提供初始值。

答案 2 :(得分:0)

我猜你的HTML页面中的字段名称实际上被称为<select name="1_cat[0]">之类的东西?

你可以使用你的循环来访问它们,如下所示:

$_POST[$i . '_' . 'cat'][0] ... or .... $_POST["{$i}_cat"][0]
$_POST[$i . '_' . 'cat'][1] ... or .... $_POST["{$i}_cat"][1]
$_POST[$i . '_' . 'cat'][2] ... or .... $_POST["{$i}_cat"][2]
etc...

除非你打开register_globals(你没有,对吗?请告诉我你没有...),所以永远不会有一个名为$1_cat[0]的PHP变量。