Цикл и генерация HTML таблиц на PHP

Давайте теперь научимся формировать таблицы. Пусть у нас дан следующий массив, содержащий тексты ячеек таблицы:

<?php $arr = [ ['name' => 'user1', 'age' => 30, 'salary' => 500], ['name' => 'user2', 'age' => 31, 'salary' => 600], ['name' => 'user3', 'age' => 32, 'salary' => 700], ]; ?>

Давайте с помощью цикла сформируем из этого массива следующий код:

<table> <tr> <tr> <td>user1</td> <td>30</td> <td>500</td> </tr> <tr> <td>user2</td> <td>31</td> <td>600</td> </tr> <tr> <td>user3</td> <td>32</td> <td>700</td> </tr> </tr> </table>

Вариант первый

Сформируем таблицу с помощью одного цикла, вручную записав в теги td элементы подмассива:

<?php echo '<table>'; foreach ($arr as $user) { echo '<tr>'; echo "<td>{$user['name']}</td>"; echo "<td>{$user['age']}</td>"; echo "<td>{$user['salary']}</td>"; echo '</tr>'; } echo '</table>'; ?>

Такой способ даст нам более полный контроль, как над порядком ячеек, так и над возможностью в каждую ячейку добавить какие-то дополнительные данные, например, вот так:

<?php echo '<table>'; foreach ($arr as $user) { echo '<tr>'; echo "<td>{$user['name']}</td>"; echo "<td>{$user['age']} years</td>"; echo "<td>{$user['salary']} dollars</td>"; echo '</tr>'; } echo '</table>'; ?>

Вариант второй

Давайте сформируем нашу таблицу с помощью двух вложенных циклов:

<?php echo '<table>'; foreach ($arr as $row) { echo '<tr>'; foreach ($row as $cell) { echo "<td>$cell</td>"; } echo '</tr>'; } echo '</table>'; ?>

Такой способ удобен тем, что не нужно прописывать каждую ячейку таблицы отдельно. Однако, недостатком такого подхода становится потеря контроля.

Впрочем, контроль можно вернуть с помощью условий, вот так:

<?php echo '<table>'; foreach ($arr as $row) { echo '<tr>'; foreach ($row as $key => $cell) { if ($key === 'salary') { echo "<td>$cell dollars</td>"; } else { echo "<td>$cell</td>"; } } echo '</tr>'; } echo '</table>'; ?>

Можно упросить наш код следующим образом:

<?php echo '<table>'; foreach ($arr as $row) { echo '<tr>'; foreach ($row as $key => $cell) { if ($key === 'salary') { $cell .= ' dollars'; } echo "<td>$cell</td>"; } echo '</tr>'; } echo '</table>'; ?>

Практическая задача

Дан следующий массив:

<?php $products = [ [ 'name' => 'product1', 'price' => 100, 'amount' => 5, ], [ 'name' => 'product2', 'price' => 200, 'amount' => 6, ], [ 'name' => 'product3', 'price' => 300, 'amount' => 7, ], ]; ?>

Сформируйте с его помощью HTML таблицу.