У меня есть php-форма, которая имеет известное количество столбцов (например, верхний диаметр, диаметр основания, ткань, цвет, количество), но имеет неизвестное количество строк, так как пользователи могут добавлять строки по мере необходимости.
Я обнаружил, как взять каждое из полей (столбцов) и поместить их в собственный массив.
<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-массивов.
При отправке вы получите массив, как будто созданный следующим образом:
$_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'];
}
name="diameters[0][top]
что я могу сделать, если у меня более одного имени? Например, top, bottom, left и right ? @DisgruntledGoat