Создайте HTML-таблицу в PHP с ячейками, занимающими несколько строк

Я хотел добиться аналогичного результата, как показано на изображении ниже.

Ожидаемый результат: введите сюда описание изображения

Вопрос: Ищу решение 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>

У вас есть какой-то конкретный вопрос по этому поводу? Что-то не работает с данным кодом? Что вы пытались решить проблему?

Nico Haase 08.05.2024 09:31
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
1
51
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий
<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

Crescentia 04.05.2024 18:03

А как насчет следующих источников? Может быть, вы можете попробовать.

<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>

Пожалуйста, добавьте какое-нибудь объяснение, чтобы другие могли извлечь уроки из вашего ответа. Что вы изменили и почему?

Nico Haase 08.05.2024 09:31

Да, это красивый код. Очень полезно.

Crescentia 08.05.2024 09:33

Другие вопросы по теме