Могу ли я помещать ассоциативные массивы в формы ввода для обработки на PHP?

Я знаю, что могу делать такие вещи, как <input name="foo[]"> , но можно ли делать такие вещи, как <input name="foo[bar]"> и показать его в PHP как $_POST['foo']['bar'] ?

Причина, по которой я спрашиваю, состоит в том, что я создаю огромную таблицу элементов формы (включая <select> с несколькими <select> ), и я хочу, чтобы мои данные были организованы для сценария, к которому я отправляю POSTING. Я хочу, чтобы элементы ввода в каждом столбце имели одно и то же базовое имя, но другой идентификатор строки в качестве ключа массива. Имеет ли это смысл?

EDIT: Я уже пытался это сделать, но, по-видимому, Drupal вмешивается в то, что я пытаюсь сделать. Я думал, что я просто неправильно понял свой синтаксис. Firebug сообщает мне, что мои имена ввода построены точно так же, но мои данные возвращаются как [foo[bar]] => data а не [foo] => array([bar] => data) .

EDIT 2: Кажется, моя реальная проблема заключалась в моем предположении, что $form_state['values'] в Drupal будет иметь такую ​​же иерархию массивов, что и $_POST . Я никогда не должен был предполагать, что Drupal будет настолько разумным и интуитивным. Прошу прощения за то, что потратил ваше время. Вы можете заниматься своим бизнесом.

Вы тоже можете сделать это в 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; } 

Теперь, если вы напечатаете_r () $ form_state ['values'] в MYMODULE_form_submit ($ form, & $ form_state), вы увидите что-то вроде этого:

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

Это напечатает значения, введенные вами в поле.

Да, ты можешь. вы можете даже сделать name="foor[bar][]" и дальше для еще большего заполнения.