Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以将关联数组放入要在PHP中处理的表单输入中吗?_Php_Html_Arrays_Drupal_Forms - Fatal编程技术网

我可以将关联数组放入要在PHP中处理的表单输入中吗?

我可以将关联数组放入要在PHP中处理的表单输入中吗?,php,html,arrays,drupal,forms,Php,Html,Arrays,Drupal,Forms,我知道我可以做像这样的事情,但是有没有可能做像这样的事情,让它在PHP中显示为$\u POST['foo']['bar'] 我问这个问题的原因是因为我正在制作一个巨大的表单元素表(包括带有多个选择的),并且我希望为我发布到的脚本干净地组织数据。我希望每列中的输入元素具有相同的基名称,但具有不同的行标识符作为数组键。这有意义吗 编辑:我已经尝试过了,但很明显Drupal干扰了我的尝试。我以为我只是把语法弄错了。Firebug告诉我,我的输入名称的构造与此完全相同,但我的数据返回为[foo[bar]

我知道我可以做像
这样的事情,但是有没有可能做像
这样的事情,让它在PHP中显示为
$\u POST['foo']['bar']

我问这个问题的原因是因为我正在制作一个巨大的表单元素表(包括带有多个选择的
),并且我希望为我发布到的脚本干净地组织数据。我希望每列中的输入元素具有相同的基名称,但具有不同的行标识符作为数组键。这有意义吗

编辑:我已经尝试过了,但很明显Drupal干扰了我的尝试。我以为我只是把语法弄错了。Firebug告诉我,我的输入名称的构造与此完全相同,但我的数据返回为
[foo[bar]=>data
,而不是
[foo]=>array([bar]=>data)


编辑2:我真正的问题似乎是我假设Drupal中的
$form\u state['values']
$\u POST具有相同的数组层次结构。我从来没有想到Drupal会如此理性和直观。很抱歉浪费了你的时间。你可以继续做你的事。

是的,你可以。您甚至可以执行
name=“foor[bar][]”
等操作以获得更多的填充。

您也可以在Drupal中轻松完成此操作。您必须记住的重要一点是将form“#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)中打印_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
)

假设我们希望使用下表打印学生分数:

<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 />'; 
}
if(isset($\u POST['submit']))
{
echo$_POST['student']['john'].
; echo$_POST['student']['kofi'].
; echo$_POST['student']['kwame'].
; }

这会将您输入的值打印到字段中。

手册上说可能会重复Odd,我试着完全这样做,但没有成功。我想这只是因为我使用的是Drupal:/我以为我没有正确使用PHP语法。现在我不确定我是否应该修改这个问题,或者写一个新的、针对Drupal的问题。噢,我不知道
#tree
。我的表单数组的结构与此类似,但我不知道其中缺少了一个额外的标志。谢谢我尝试了你的解决方案,但我想知道为什么我必须这样使用它:
$\u POST['student']['john\'''']
?我还以如下形式使用它: