Я хотел добиться аналогичного результата, как показано на изображении ниже.
Ожидаемый результат: введите сюда описание изображения
Вопрос: Ищу решение php html для создания динамической таблицы вместе с Rowspan. У меня возникла проблема с получением родительской строки и добавлением диапазона строк.
Ваша помощь очень ценится.
Вот мои данные массива php:
<?php
// Data dari database
$data = [
[
'nama' => 'Asyah',
'hobi' => ['Bola', 'Voly', 'Renang'],
'umur' => '10 Tahun',
'keahlian' => ['Bernyanyi', 'Menari']
],
[
'nama' => 'Rian',
'hobi' => ['Bola'],
'umur' => '10 Tahun',
'keahlian' => ['Main musik', 'Menari']
],
[
'nama' => 'Boby',
'hobi' => ['Basket', 'Voly'],
'umur' => '10 Tahun',
'keahlian' => ['Bernyanyi', 'Menari', 'Coding']
]
];
?>
Это сценарий, который я пробовал:
<?php
// Fungsi untuk menghitung jumlah rowspan
function getRowspan($data) {
$total = 0;
foreach ($data as $item) {
$total += max(count($item['hobi']), count($item['keahlian']));
}
return $total;
}
?>
<table border = "1">
<thead>
<tr>
<th>Nama</th>
<th>Hobi</th>
<th>Umur</th>
<th>Keahlian</th>
</tr>
</thead>
<tbody>
<?php foreach ($data as $item): ?>
<?php $rowspan = max(count($item['hobi']), count($item['keahlian'])); ?>
<tr>
<td rowspan = "<?php echo $rowspan; ?>"><?php echo $item['nama']; ?></td>
<td><?php echo implode('</td></tr><tr><td>', $item['hobi']); ?></td>
<td rowspan = "<?php echo $rowspan; ?>"><?php echo $item['umur']; ?></td>
<td><?php echo implode('</td></tr><tr><td>', $item['keahlian']); ?></td>
</tr>
<?php for ($i = 1; $i < $rowspan; $i++): ?>
<tr>
<td><?php echo isset($item['hobi'][$i]) ? $item['hobi'][$i] : ''; ?></td>
<td><?php echo isset($item['keahlian'][$i]) ? $item['keahlian'][$i] : ''; ?></td>
</tr>
<?php endfor; ?>
<?php endforeach; ?>
</tbody>
</table>
<td rowspan = "<?php echo $rowspan; ?>"><?php echo $item['nama']; ?></td>
<td><?php echo implode('</td></tr><tr><td>', $item['hobi']); ?></td>
<td rowspan = "<?php echo $rowspan; ?>"><?php echo $item['umur']; ?></td>
<td><?php echo implode('</td></tr><tr><td>', $item['keahlian']); ?></td>
Проблема заключается во 2-й и 4-й строках, и я не совсем понимаю, почему вы хотите их взорвать. Вам нужно отобразить только первый элемент из этих двух элементов. И я рекомендую использовать короткий тег.
<td rowspan = "<?= $rowspan ?>"><?= $item['nama'] ?></td>
<td><?= $item['hobi'][0] ?? '' ?></td>
<td rowspan = "<?= $rowspan ?>"><?= $item['umur'] ?></td>
<td><?= $item['keahlian'][0] ?? '' ?></td>
Да, вы правы, но у меня возникли проблемы с коротким тегом, поэтому я изменил этот код: <td rowspan = "<?= $rowspan ?>"><?= $item['nama'] ?></td> <td><?php echo isset($item['hobi'][0]) ? $item['hobi'][0] : '';?></td> <td rowspan = "<?= $rowspan ?>"><?= $item['umur'] ?></td> <td><?php echo isset($item['keahlian'][0]) ? $item['keahlian'][0] : '';?></td>
Проблема решена, большое спасибо @shingo
А как насчет следующих источников? Может быть, вы можете попробовать.
<style>
.header{background:#ccffcc;color:#006600;}
table, th, td {
border: 1px solid black;
border-collapse: collapse;
padding:2px;
}
</style>
<?php
// variable containing an array of data
$data = [
[
'nama' => 'Asyah',
'hobi' => ['Bola', 'Voly', 'Renang'],
'umur' => '10 Tahun',
'keahlian' => ['Bernyanyi', 'Menari']
],
[
'nama' => 'Rian',
'hobi' => ['Bola'],
'umur' => '10 Tahun',
'keahlian' => ['Main musik', 'Menari']
],
[
'nama' => 'Boby',
'hobi' => ['Basket', 'Voly'],
'umur' => '10 Tahun',
'keahlian' => ['Bernyanyi', 'Menari', 'Coding']
]
];
$html = ''; // Variable to store table row looping HTML
foreach ($data as $item) {
$rowspan = max(count($item['hobi']), count($item['keahlian']));
$html .= "<tr>
<td rowspan=\"$rowspan\" valign='top'>{$item['nama']}</td>
<td align='right' valign='top'>" . (isset($item['hobi'][0]) ? $item['hobi'][0] : '') . "</td>
<td rowspan=\"$rowspan\" valign='top'>{$item['umur']}</td>
<td valign='top'>" . (isset($item['keahlian'][0]) ? $item['keahlian'][0] : '') . "</td>
</tr>";
for ($i = 1; $i < $rowspan; $i++)
{
$html .= "<tr>
<td align='right' valign='top'>" . (isset($item['hobi'][$i]) ? $item['hobi'][$i] : '') . "</td>
<td align='right' valign='top'>" . (isset($item['keahlian'][$i]) ? $item['keahlian'][$i] : '') . "</td>
</tr>";
}
$ni++;
}
?>
<table class = "table">
<thead>
<tr class = "header">
<th>Nama</th>
<th>Hobi</th>
<th>Umur</th>
<th>Keahlian</th>
</tr>
</thead>
<tbody><?php echo $html; ?></tbody>
</table>
Пожалуйста, добавьте какое-нибудь объяснение, чтобы другие могли извлечь уроки из вашего ответа. Что вы изменили и почему?
Да, это красивый код. Очень полезно.
У вас есть какой-то конкретный вопрос по этому поводу? Что-то не работает с данным кодом? Что вы пытались решить проблему?