Вывести многомерный массив php в таблицу html

У меня есть форма, которая содержит 8 столбцов и переменное количество строк, которые мне нужно отправить по электронной почте клиенту в хорошо отформатированном электронном письме. Форма представляет необходимые поля в виде многомерного массива. Пример ниже:

<input name="order[0][topdiameter]" type="text" id="topdiameter0" value="1" size="5" /> <input name="order[0][bottomdiameter]" type="text" id="bottomdiameter0" value="1" size="5" /> <input name="order[0][slantheight]" type="text" id="slantheight0" value="1" size="5" /> <select name="order[0][fittertype]" id="fittertype0"> <option value="harp">Harp</option> <option value="euro">Euro</option> <option value="bulbclip">Regular</option> </select> <input name="order[0][washerdrop]" type="text" id="washerdrop0" value="1" size="5" /> <select name="order[0][fabrictype]" id="fabrictype"> <option value="linen">Linen</option> <option value="pleated">Pleated</option> </select> <select name="order[0][colours]" id="colours0"> <option value="beige">Beige</option> <option value="white">White</option> <option value="eggshell">Eggshell</option> <option value="parchment">Parchment</option> </select> <input name="order[0][quantity]" type="text" id="quantity0" value="1" size="5" /> 

Эта форма форматируется в таблице, а строки могут быть добавлены к ней динамически. То, что мне не удалось сделать, – это получить правильно отформатированную таблицу из массива.

Это то, что я сейчас использую (схватил из сети).

 <?php if (isset($_POST["submit"])) { $arr= $_POST['order'] echo '<table>'; foreach($arr as $arrs) { echo '<tr>'; foreach($arrs as $item) { echo "<td>$item</td>"; } echo '</tr>'; } echo '</table>; }; ?> 

Это отлично работает для одного ряда данных. Если я попытаюсь отправить 2 или более строк из формы, то один из столбцов исчезнет. Я хотел бы, чтобы таблица была отформатирована как:

 | top | Bottom | Slant | Fitter | Washer | Fabric | Colours | Quantity | ------------------------------------------------------------------------ |value| value | value | value | value | value | value | value | 

с дополнительными строками по мере необходимости. Но я не могу найти примеров, которые будут генерировать этот тип таблицы!

Похоже, что это должно быть что-то довольно прямолинейное, но я просто не могу найти пример, который работает так, как он мне нужен.

В своем HTML попробуйте что-то вроде этого:

 <table> <tr> <th>Bottom</th> <th>Slant</th> <th>Fitter</th> </tr> <?php foreach ($_POST['order'] as $order): ?> <tr> <td><?php echo $order['bottomdiameter'] ?></td> <td><?php echo $order['slantheight'] ?></td> <td><?php echo $order['fittertype'] ?></td> </tr> <?php endforeach; ?> </table> 

Очевидно, что я не включаю в него все ваши атрибуты, но, надеюсь, вы получите эту идею.

Как насчет этого?

 $keys = array_keys($_POST['order'][0]); echo "<table><tr><th>".implode("</th><th>", $keys)."</th></tr>"; foreach ($_POST['order'] as $order) { if (!is_array($order)) continue; echo "<tr><td>".implode("</td><td>", $order )."</td></tr>"; } echo "</table> 

Класс таблицы, который я написал некоторое время назад

 <?php class Table { protected $opentable = "\n<table cellspacing=\"0\" cellpadding=\"0\">\n"; protected $closetable = "</table>\n"; protected $openrow = "\t<tr>\n"; protected $closerow = "\t</tr>\n"; function __construct($data) { $this->string = $this->opentable; foreach ($data as $row) { $this->string .= $this->buildrow($row); } $this->string .= $this->closetable; } function addfield($field, $style = "null") { if ($style == "null") { $html = "\t\t<td>" . $field . "</td>\n"; } else { $html = "\t\t<td class=\"" . $style . "\">" . $field . "</td>\n"; } return $html; } function buildrow($row) { $html .= $this->openrow; foreach ($row as $field) { $html .= $this->addfield($field); } $html .= $this->closerow; return $html; } function draw() { echo $this->string; } } ?> 

Чтобы использовать это:

 <body> <?php $multiDimArray = []; # Turn the form array into a matrix for ($i = 0; $i < count($_POST['order']); $i++) { $multiDimArray[] = []; foreach ($_POST['order'][$i] as $key=>$value) { if ($i == 0) { $multiDimArray[$i][] = $key; } $multiDimArray[$i][] = $value; } } $table = new Table($multiDimArray); # Create and draw the table $table->draw(); ?> </body>