119

I have a form that is a little complex and I am hoping to simplify the server-side (PHP) processing by natively POSTing an array of tuples.

The first part of the form represents a User:

  • First Name
  • Last Name
  • Email
  • Address
  • etc

The second part of the form represents a Tree:

  • Fruit
  • Height
  • etc

The problem is that I need to be able to POST multiple Trees for a single User in the same form. I would like to send the information as a single User with an array of Trees but this might be too complex to do with a form. The only thing that comes to mind is using javascript to create some JSON message with a User object and an array of Tree objects. But it would be nice to avoid javascript to support more users (some people have scripts turned off).

1
  • 2
    Does the array guarantee order? I would like an array of Tree objects which would have multiple fields, so this would mean I have to use multiple arrays to represent a Tree and the arrays must be ordered so I can figure out which Tree they represent. Commented Jan 31, 2012 at 2:44

2 Answers 2

206

check this one out.

<input type="text" name="firstname">
<input type="text" name="lastname">
<input type="text" name="email">
<input type="text" name="address">

<input type="text" name="tree[tree1][fruit]">
<input type="text" name="tree[tree1][height]">

<input type="text" name="tree[tree2][fruit]">
<input type="text" name="tree[tree2][height]">

<input type="text" name="tree[tree3][fruit]">
<input type="text" name="tree[tree3][height]">

it should end up like this in the $_POST[] array (PHP format for easy visualization)

$_POST[] = array(
    'firstname'=>'value',
    'lastname'=>'value',
    'email'=>'value',
    'address'=>'value',
    'tree' => array(
        'tree1'=>array(
            'fruit'=>'value',
            'height'=>'value'
        ),
        'tree2'=>array(
            'fruit'=>'value',
            'height'=>'value'
        ),
        'tree3'=>array(
            'fruit'=>'value',
            'height'=>'value'
        )
    )
)
Sign up to request clarification or add additional context in comments.

5 Comments

What chars are allowed in array indexing? Can we use ,.:` @? Example: tree[tree 1][fr ui_t] tree[tree.1][fru:it] tree[tree@1][fru,it] Is _ only safe delimiter in key naming?
would tree[][fruit] and tree[][height] not be valid to automatically index the array?
How do i get this submitted data as array/object in js to use in submit callback... i have tried new formData($("form")[0]) and jQuery $("form").serializeArray() both returning name="tree[tree1][fruit]" as string....help
Note: it doesn't work with jquery functions to collect form data as .serialize() or .serializeArray()
I tried but did not work for me in laravel
115

You can also post multiple inputs with the same name and have them save into an array by adding empty square brackets to the input name like this:

<input type="text" name="comment[]" value="comment1"/>
<input type="text" name="comment[]" value="comment2"/>
<input type="text" name="comment[]" value="comment3"/>
<input type="text" name="comment[]" value="comment4"/>

If you use php:

print_r($_POST['comment']) 

you will get this:

Array ( [0] => 'comment1' [1] => 'comment2' [2] => 'comment3' [3] => 'comment4' )

1 Comment

I feel like this is the actual answer to the posted question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.