在 PHP 中生成一个包含跨多行单元格的 HTML 表格

问题描述 投票:0回答:1

我想获得类似的结果,如下图所示。

预期结果: 在此输入图片描述

问题:寻找 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>
php html
1个回答
0
投票
<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>
© www.soinside.com 2019 - 2024. All rights reserved.