我可以将关联数组放入要在 PHP 中处理的表单输入中吗?
Posted
技术标签:
【中文标题】我可以将关联数组放入要在 PHP 中处理的表单输入中吗?【英文标题】:Can I put associative arrays in form inputs to be processed in PHP? 【发布时间】:2011-09-22 01:57:09 【问题描述】:我知道我可以执行<input name="foo[]">
之类的操作,但是否可以执行<input name="foo[bar]">
之类的操作并让它在php 中显示为$_POST['foo']['bar']
?
我问的原因是因为我正在制作一个巨大的表单元素表(包括带有多个选择的<select>
),并且我希望为我要发布到的脚本清晰地组织我的数据.我希望每列中的输入元素具有相同的基本名称,但具有不同的行标识符作为数组键。这有意义吗?
编辑:我已经尝试过了,但显然 Drupal 正在干扰我正在尝试做的事情。我以为我只是弄错了语法。 Firebug 告诉我,我的输入名称的构造与此完全相同,但我的数据返回为 [foo[bar]] => data
而不是 [foo] => array([bar] => data)
。
编辑 2: 看来我真正的问题是我假设 Drupal 中的 $form_state['values']
将具有与 $_POST
相同的数组层次结构。我不应该认为 Drupal 会如此合理和直观。我为浪费您的时间而道歉。你可以去做你的事了。
【问题讨论】:
手册上是这么写的php.net/manual/en/faq.html.php#faq.html.arrays Posting array from form的可能重复 奇怪,我试图做到这一点,但没有成功。我想这只是因为我使用的是 Drupal:/ 我以为我只是没有正确使用 PHP 语法。现在我不确定是否应该修改这个问题或写一个新的、特定于 Drupal 的问题。 【参考方案1】:回答为时已晚,但强调@Ernest Boabramah 回答的一个方面很重要。
如果您将输入数据作为数组发送,其中引号内的键如下
<input name="student['john']">
<input name="student['kofi']">
然后你必须在访问 php 中的值时转义键周围的那些引号
echo $_POST['student']['\'john\''];
echo $_POST['student']['\'kofi\'']
我建议您删除键周围的引号
<input name="student[john]">
<input name="student[kofi]">
这样您就可以在不转义任何内容的情况下访问它们
echo $_POST['student']['john'];
echo $_POST['student']['kofi'];
【讨论】:
【参考方案2】:假设我们要使用以下表格打印学生成绩:
<form action="" method="POST">
<input name="student['john']">
<input name="student['kofi']">
<input name="student['kwame']">
<input type="submit" name="submit">
</form>
和 PHP 代码打印他们的分数:
if(isset($_POST['submit']))
echo $_POST['student']['john'] . '<br />';
echo $_POST['student']['kofi'] . '<br />';
echo $_POST['student']['kwame'] . '<br />';
这将打印您在字段中输入的值。
【讨论】:
我尝试了您的解决方案,但我想知道为什么我必须这样使用它:$_POST['student']['\'john\'']
?我也以这样的形式使用它:<input name="student[kofi]">
【参考方案3】:
您也可以在 Drupal 中轻松做到这一点。您必须记住的重要一点是将表单“#tree”参数设置为 TRUE。举个简单的例子:
function MYMODULE_form()
$form = array('#tree' => TRUE);
$form['group_1']['field_1'] = array(
'#type' => 'textfield',
'#title' => 'Field 1',
);
$form['group_1']['field_2'] = array(
'#type' => 'textfield',
'#title' => 'Field 2',
);
$form['group_2']['field_3'] = array(
'#type' => 'textfield',
'#title' => 'Field 3',
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => 'Submit',
);
return $form;
现在,如果你在 MYMODULE_form_submit($form, &$form_state) 中 print_r() $form_state['values'],你会看到这样的:
Array
(
[group_1] => Array
(
[field_1] => abcd
[field_2] => efgh
)
[group_2] => Array
(
[field_3] => ijkl
)
[op] => Submit
[submit] => Submit
[form_build_id] => form-7a870f2ffdd231d9f76f033f4863648d
[form_id] => test_form
)
【讨论】:
噢,我不知道#tree
。我的表单数组的结构与此类似,但我不知道那里缺少一个额外的标志。谢谢!【参考方案4】:
是的,你可以。你甚至可以使用name="foor[bar][]"
来获得更多的填充。
【讨论】:
以上是关于我可以将关联数组放入要在 PHP 中处理的表单输入中吗?的主要内容,如果未能解决你的问题,请参考以下文章
使用 PHP 将 JSON 数据放入 html 表单输入复选框