У меня есть форма, которая содержит 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>