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


Can I put associative arrays in form inputs to be processed in PHP?

我知道我可以做<input name="foo[]">这样的事情,但有可能做<input name="foo[bar]">这样的事情并在PHP中显示为$_POST['foo']['bar']吗?

我之所以这么问,是因为我正在制作一个表单元素的大表(包括具有多项选择的<select>),并且我希望为我要发布到的脚本干净地组织我的数据。我希望每列中的输入元素具有相同的基名称,但具有不同的行标识符作为数组键。这有道理吗

编辑:我已经试过了,但显然Drupal干扰了我的操作。我以为我只是语法错误了。Firebug告诉我,我的输入名称是这样构造的,但我的数据返回为[foo[bar]] => data而不是[foo] => array([bar] => data)

EDIT 2:我真正的问题似乎是我假设Drupal中的$form_state['values']$_POST具有相同的数组层次结构。我从来没有想过Drupal会如此合理和直观。很抱歉浪费了你的时间。你可以去做你的事了。

假设我们想使用以下表格打印学生成绩:

<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 />'; 
}

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

可以。您甚至可以执行name="foor[bar][]"及以上操作以获得更多填充。

您也可以在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)中打印_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
)

回答为时已晚,但重要的是要突出@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'];