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

Viewed 27958

I know I can do things like <input name="foo[]">, but is it possible to do things like <input name="foo[bar]"> and have it show up in PHP as $_POST['foo']['bar']?

The reason I ask is because I'm making a huge table of form elements (including <select> with multiple selections), and I want to have my data organized cleanly for the script that I'm POSTing to. I want the input elements in each column to have the same base name, but a different row identifier as an array key. Does that make sense?

EDIT: I tried exactly this already, but apparently Drupal is interfering with what I'm trying to do. I thought I was just getting my syntax wrong. Firebug tells me that my input names are constructed exactly like this, but my data comes back as [foo[bar]] => data rather than [foo] => array([bar] => data).

EDIT 2: It seems my real problem was my assumption that $form_state['values'] in Drupal would have the same array hierarchy as $_POST. I should never have assumed that Drupal would be that reasonable and intuitive. I apologize for wasting your time. You may go about your business.

4 Answers

Too late to answer but its important to highlight an aspect of @Ernest Boabramah answer.

If you send your input data as array having keys inside quotes as follows

<input name="student['john']">
<input name="student['kofi']">

Then you must escape those quotes around keys while accessing the value in php

echo $_POST['student']['\'john\''];
echo $_POST['student']['\'kofi\'']

I would suggest you to remove those quotes around the keys

<input name="student[john]">
<input name="student[kofi]">

so you can access them without escaping anything

echo $_POST['student']['john'];
echo $_POST['student']['kofi']; 
Related