values create assoc array php html forms multidimensional-array html-table

create - php array assoc



Salida una matriz multi-dimensional php a una tabla html (3)

¿Qué tal esto?

$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>

Tengo un formulario que tiene 8 columnas y un número variable de filas que debo enviar por correo electrónico al cliente en un correo electrónico con un formato agradable. El formulario envía los campos necesarios como una matriz multidimensional. El siguiente ejemplo es el siguiente:

<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" />

Este formulario está formateado en una tabla y las filas se pueden agregar dinámicamente. Lo que no he podido hacer es sacar una tabla con el formato adecuado de la matriz.

Esto es lo que estoy usando ahora (agarrado de la red).

<?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>; }; ?>

Esto funciona perfectamente para una sola fila de datos. Si intento enviar 2 o más filas desde el formulario, una de las columnas desaparece. Me gustaría que la tabla se formatee como:

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

con filas adicionales según sea necesario. ¡Pero no puedo encontrar ningún ejemplo que genere ese tipo de tabla!

Parece que esto debería ser algo bastante sencillo, pero simplemente no puedo encontrar un ejemplo que funcione de la manera que lo necesito también.


En tu HTML, prueba algo como esto:

<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>

Obviamente, no incluyo todos tus atributos allí, pero espero que entiendas la idea.


Una clase de tabla que escribí hace un tiempo

<?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; } } ?>

Para ser usado así:

<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>