I'll try and describe how form arrays work.
If you name an element name='hello' then this can only contain one value. If you repeat the element multiple times on the page, only the last instance will be sent to the server.
If you name an element with square braces immediately after name='hello[]' then when you repeat this element on the form, the server will receive an input called hello containing an array of values, one for each hello field.
If you name an element with a name and then square braces and then another name name='rows[]hello' then when you repeat this element on the form you get an input called rows which contains an array of rows, each of which has a 'hello' field.
In this latter example, you can iterate over the rows;
foreach($request->rows as $row)
{
$hello = $row['hello'];
$there = $row['there'];
$world = $row['world'];
}
You can also use laravel array validation;
$rules= [
'rows.*.hello' =>'required|max:20',
'rows.*.there' =>'required|max:100',
'rows.*.world' =>'required|max:50',
];
So, if you are dealing with repeated form elements the name[]name approach is definitely the way to go.
If you use empty braces like this then what is returned is a simple array. You can also key the array too. So if for instance, editing a list of activities;
@foreach($activities as $activity)
<input name='activities[{{ $activity->id }}]title' />
<input name='activities[{{ $activity->id }}]desc' />
<input name='activities[{{ $activity->id }}]duration' />
Does this help you to sort out the naming of the form fields?