Отправка многомерного массива через POST с помощью php

у меня есть форма php, которая имеет известное количество столбцов (ex. верхний диаметр, нижний диаметр, ткань, цвет, количество), но имеет неизвестное количество строк, так как пользователи могут добавлять строки по мере необходимости.

я обнаружил, как взять каждое из полей(столбцов) и поместить их в собственный массив.

<input name="topdiameter['+current+']" type="text" id="topdiameter'+current+'" size="5" />
<input name="bottomdiameter['+current+']" type="text" id="bottomdiameter'+current+'" size="5" />

Итак, что я получаю в HTML:

<tr>
  <td><input name="topdiameter[0]" type="text" id="topdiameter0" size="5" /></td>
  <td><input name="bottomdiameter[0]" type="text" id="bottomdiameter0" size="5" /></td>
</tr>
<tr>
  <td><input name="topdiameter[1]" type="text" id="topdiameter1" size="5" /></td>
  <td><input name="bottomdiameter[1]" type="text" id="bottomdiameter1" size="5" /></td>
</tr>

...and so on.

то, что я хотел бы сделать сейчас, это взять все строки и столбцы, поместить их в многомерный массив и отправить содержимое этого клиенту (желательно в красиво отформатированной таблице). Я не смог понять, как объединить все эти входные данные и выбрать в хороший массив.

на данный момент мне придется попробовать использовать несколько массивов 1D, хотя у меня есть идея, что использование одного 2D-массива было бы лучшей практикой, чем использование нескольких массивов 1D.

2 ответов


при отправке вы получите массив, как если бы он был создан следующим образом:

$_POST['topdiameter'] = array( 'first value', 'second value' );
$_POST['bottomdiameter'] = array( 'first value', 'second value' );

однако я бы предложил вместо этого изменить имена форм на этот формат:

name="diameters[0][top]"
name="diameters[0][bottom]"
name="diameters[1][top]"
name="diameters[1][bottom]"
...

используя этот формат, гораздо проще перебирать значения.

if ( isset( $_POST['diameters'] ) )
{
    echo '<table>';
    foreach ( $_POST['diameters'] as $diam )
    {
        // here you have access to $diam['top'] and $diam['bottom']
        echo '<tr>';
        echo '  <td>', $diam['top'], '</td>';
        echo '  <td>', $diam['bottom'], '</td>';
        echo '</tr>';
    }
    echo '</table>';
}

вы можете отправить все параметры с таким именем:

params[0][topdiameter]
params[0][bottomdiameter]
params[1][topdiameter]
params[1][bottomdiameter]

потом вы делаете что-то вроде этого:

foreach ($_REQUEST['params'] as $item) {
    echo $item['topdiameter'];
    echo $item['bottomdiameter'];
}