如何在 PHP 中动态生成带 rowspan 的 HTML 表格

星辰君_6370

星辰君_6370

2026-09-22

413人浏览

原创

如何在 PHP 中动态生成带 rowspan 的 HTML 表格

本文详解如何基于嵌套数组数据,用 php 动态构建符合语义的 html 表格,并正确实现跨行(rowspan)布局,解决多值字段(如兴趣、技能)与单值字段(如姓名、年龄)对齐难题。

本文详解如何基于嵌套数组数据,用 php 动态构建符合语义的 html 表格,并正确实现跨行(rowspan)布局,解决多值字段(如兴趣、技能)与单值字段(如姓名、年龄)对齐难题。

在 Web 开发中,常需将具有“一对多”关系的数据(例如一名学生拥有多项爱好和多项技能)渲染为结构清晰的 HTML 表格。此时,若直接按每条子项生成独立行,会导致姓名、年龄等单值字段重复冗余;而合理使用 <td rowspan="N"> 可让父级信息纵向合并,提升可读性与专业性。<p>但关键难点在于:<strong>rowspan 值必须基于该行所有关联子项的最大数量统一计算,且后续子行(tr)需严格对应列结构,避免表格错位</strong>。原代码中错误地对 <code>hobikeahlian 数组使用 implode('

') 拼接,这会破坏 HTML 标签层级,导致浏览器解析异常(如嵌套 <tr> 出现在 <code><td> 内),同时未控制子行数量与列对齐逻辑。<p>以下是推荐的健壮实现方案:</p> <pre class="brush:php;toolbar:false;">&lt;?php $data = [ ['nama' =&gt; 'Asyah', 'hobi' =&gt; ['Bola', 'Voly', 'Renang'], 'umur' =&gt; '10 Tahun', 'keahlian' =&gt; ['Bernyanyi', 'Menari']], ['nama' =&gt; 'Rian', 'hobi' =&gt; ['Bola'], 'umur' =&gt; '10 Tahun', 'keahlian' =&gt; ['Main musik', 'Menari']], ['nama' =&gt; 'Boby', 'hobi' =&gt; ['Basket', 'Voly'], 'umur' =&gt; '10 Tahun', 'keahlian' =&gt; ['Bernyanyi', 'Menari', 'Coding']] ]; function renderSpannedTable($data) { echo '</pre> <table border="1" style="border-collapse: collapse; width: 100%;">'; echo '<thead><tr>'; echo '<th>Nama</th> <th>Hobi</th> <th>Umur</th> <th>Keahlian</th>'; echo '</tr></thead> <tbody>'; foreach ($data as $item) { $hobiCount = count($item['hobi']); $keahlianCount = count($item['keahlian']); $rowspan = max($hobiCount, $keahlianCount); // 第一行:显示姓名、首个爱好、年龄、首个技能,并设置 rowspan echo '<tr>'; echo '<td rowspan="' . $rowspan . '">' . htmlspecialchars($item['nama']) . '</td>'; echo '<td>' . ($hobiCount > 0 ? htmlspecialchars($item['hobi'][0]) : '') . '</td>'; echo '<td rowspan="' . $rowspan . '">' . htmlspecialchars($item['umur']) . '</td>'; echo '<td>' . ($keahlianCount > 0 ? htmlspecialchars($item['keahlian'][0]) : '') . '</td>'; echo '</tr>'; // 后续行:仅填充剩余爱好和技能,保持列结构一致(空单元格占位) for ($i = 1; $i '; echo '<td>' . ($i '; echo '</td> <td></td>'; // Umur 列已由 rowspan 覆盖,此处留空 echo '<td>' . ($i '; echo ''; } } echo '</td> </tbody> </table>'; } renderSpannedTable($data); ?><p>✅ <strong>核心要点说明:</strong> </p><div class="aritcle_card flexRow artxards"> <div class="artcardd flexRow"> <a class="aritcle_card_img" rel="nofollow" href="/xiazai/skill4293" title="Doc To HTML"><img src="https://img.php.cn/upload/skill/000/000/081/178998486916110.jpg" alt="Doc To HTML" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a> <div class="aritcle_card_info flexColumn"> <a rel="nofollow" href="/xiazai/skill4293" title="Doc To HTML" class="overflowclass">Doc To HTML</a> <p class="overflowclass">使用 MinerU 文档处理引擎将 Word 文档(.doc、.docx)转换为保留结构和格式的干净 HTML。</p> </div> <a rel="nofollow" href="/xiazai/skill4293" title="Doc To HTML" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a> </div> </div> <ul> <li> <strong>rowspan 计算准确</strong>:以 <code>max(count(hobi), count(keahlian)) 确保姓名与年龄能完整覆盖该学生所有子项行数;
  • 结构严谨:首行包含全部四列(含 rowspan 单元格),后续行严格维持四列结构(空 <td> 占位),避免列偏移; <li> <strong>安全防护</strong>:使用 <code>htmlspecialchars() 防止 XSS,尤其当数据来自用户输入或数据库时;
  • 空值容错:通过 count() > 0$i 判断确保数组访问安全,避免 <code>Undefined offset
  • 语义清晰<thead> / <code><tbody> 明确划分表头与主体,利于可访问性与样式控制。<p>⚠️ <strong>注意事项:</strong> </p> <ul> <li>若某学生无任何爱好或技能(空数组),<code>max(0, 0) 将得 0,导致 rowspan="0"(非法)。建议预处理数据,至少保证 rowspan >= 1
  • 此方案假设 hobikeahlian 是唯一需要展开的多值字段;若新增类似字段(如 nilai),需同步扩展 rowspan 计算逻辑与列结构;
  • 如需响应式或复杂样式,建议配合 CSS(如 table-layout: fixed)及现代框架(如 DataTables)进一步增强体验。
  • 通过以上方法,即可生成结构正确、语义合规、易于维护的动态 rowspan 表格,真正实现数据与呈现的精准对齐。

    php免费学习视频:立即使用
    踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!

    相关文章

    HTML速学教程(入门课程)
    HTML速学教程(入门课程)

    HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

    下载

    相关标签:

    php html

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

    相关专题

    更多
    php文件怎么打开
    php文件怎么打开

    打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

    2023.09.01

    9024

    6

    php怎么取出数组的前几个元素
    php怎么取出数组的前几个元素

    取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

    2023.10.11

    5481

    5

    php反序列化失败怎么办
    php反序列化失败怎么办

    php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

    2023.10.11

    2015

    5

    php怎么连接mssql数据库
    php怎么连接mssql数据库

    连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

    2023.10.23

    3408

    4

    php连接mssql数据库的方法
    php连接mssql数据库的方法

    php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

    2023.10.23

    4074

    6

    html怎么上传
    html怎么上传

    html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

    2023.11.03

    3191

    9

    PHP出现乱码怎么解决
    PHP出现乱码怎么解决

    PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

    2023.11.09

    4517

    8

    php文件怎么在手机上打开
    php文件怎么在手机上打开

    php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

    2023.11.13

    3522

    8

    sprintf函数用法详解
    sprintf函数用法详解

    sprintf函数的用法:1、格式化字符串;2、指定输出宽度和精度;3、返回值。更多关于sprintf函数用法详解的内容,大家可以阅读下面的文章。

    2023.11.27

    11582

    4

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    墨刀帮助中心
    墨刀帮助中心

    共0课时 | 0人学习

    MyEclipse学习中心
    MyEclipse学习中心

    共0课时 | 0人学习

    Apache Subversion 官方手册
    Apache Subversion 官方手册

    共0课时 | 0人学习