我想获得类似的结果,如下图所示。
预期结果: 在此输入图片描述
问题:寻找 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>
问题出在第二行和第四行,我不太清楚你为什么要内爆它们。您只需要显示这两项的第一个元素即可。
<td rowspan="<?php echo $rowspan; ?>"><?php echo $item['nama']; ?></td>
<td><?= $item['hobi'][0] ?? '' ?></td>
<td rowspan="<?php echo $rowspan; ?>"><?php echo $item['umur']; ?></td>
<td><?= $item['keahlian'][0] ?? '' ?></td>