Таблицы
Показ простой таблицы
Для вывода больших таблиц удобно собирать отдельно набор столбцов для показа, а потом используя этот набор, выводить данные
<?php
/*
* key - ключ, значение которого надо вывести
* label - отображаемое название колонки
*/
$columns = [
['key' => 'id', 'label' => 'Ид'],
['key' => 'name', 'label' => 'Имя'],
['key' => 'email', 'label' => 'Email'],
];
$users = [
['id' => 1, 'name' => 'John', 'email' => 'john@example.com'],
['id' => 2, 'name' => 'Jack', 'email' => 'jack@example.com'],
];
?>
<table>
<thead>
<?php foreach ($columns as $column): ?>
<th><?= $column['label']; ?></th>
<?php endforeach; ?>
</thead>
<tbody>
<?php foreach ($data as $row): ?>
<tr>
<?php foreach ($columns as $column): ?>
<td><?= $row[$column['key']] ?? ''; ?></td>
<?php endforeach; ?>
</tr>
<?php endforeach; ?>
</tbody>
</table>
Получение значений через dot-нотацию
Предыдущий вариант не сработает если в данных будут вложенные массивы.
$users = [
['id' => 1, 'name' => 'John', 'contacts' => ['email' => 'john@example.com', 'phone' => '+7 888 888 88 88']],
['id' => 2, 'name' => 'Jack', 'contacts' => ['email' => 'jack@example.com', 'phone' => '+7 999 999 99 99']],
];
В этом случае можно определить функцию для получения данных в dot-нотации, то есть
'contacts.email' соответствует значению ['contacts']['email']:
<?php
function getDotNotationValue(array $data, string $key)
{
if ($key === '') {
return null;
}
$keyChain = explode('.', $key);
while ($current = array_shift($keyChain)) {
if (!array_key_exists($current, $data)) {
return null;
}
$data = $data[$current];
}
return $data;
}
$columns = [
['key' => 'name', 'label' => 'Имя'],
['key' => 'contacts.email', 'label' => 'Email'],
['key' => 'contacts.phone', 'label' => 'Телефон'],
];
?>
<table>
<thead>
<?php foreach ($columns as $column): ?>
<th><?= $column['label']; ?></th>
<?php endforeach; ?>
</thead>
<tbody>
<?php foreach ($users as $user): ?>
<tr>
<?php foreach ($columns as $column): ?>
<td><?= getDotNotationValue($user, $column['key']) ?? ''; ?></td>
<?php endforeach; ?>
</tr>
<?php endforeach; ?>
</tbody>
</table>