如何将数据库中的JSON数据渲染为表格格式及PHP代码问题排查
问题修复方案
原有代码问题点
- 变量命名冲突:循环遍历
$testList时的值变量用了$data,和外层存储原始数据的$data重名,会导致外层变量被覆盖 - 分页逻辑错误:要实现每行3个
issue_name、内容之间间隔空白列的效果,原有判断i%2==0的逻辑不符合需求 - 尾部数据丢失:循环结束后,不足3个的剩余内容不会被拼接进表格,会出现数据遗漏
- 初始变量未定义:
$tdata没有在循环外提前声明,首次使用时会抛出PHP警告
修正后的代码
<?php $testData = json_decode($data['test_data'], true); $testList = $testData['list'] ?? []; // 增加空值判断避免报错 $rows = []; $currentRow = []; foreach ($testList as $i => $item) { // 改变量名为item避免和外层$data冲突 $currentRow[] = htmlspecialchars($item['issue_name']); // 转义特殊字符避免XSS漏洞 // 每攒够3个内容就生成一行 if (count($currentRow) === 3) { $rows[] = '<td>' . implode('</td><td></td><td>', $currentRow) . '</td>'; $currentRow = []; } } // 处理循环结束后剩余的不足3个的内容 if (!empty($currentRow)) { $rows[] = '<td>' . implode('</td><td></td><td>', $currentRow) . '</td>'; // 如果需要剩余位置补空白td可以取消注释下面这段 // $paddingCount = (3 - count($currentRow)) * 2 -1; // if ($paddingCount > 0) { // $rows[count($rows)-1] .= str_repeat('<td></td>', $paddingCount); // } } // 输出表格 echo '<table border="1" cellpadding="10"><tr>' . implode('</tr><tr>', $rows) . '</tr></table>';
改动说明
- 修复了变量命名冲突问题,避免外层原始数据被覆盖
- 增加了空值判断和XSS转义,提升代码健壮性和安全性
- 调整行生成逻辑为每3个内容生成一行,符合示例表格的排版规则
- 新增尾部剩余内容的处理逻辑,避免数据丢失
- 可选增加了剩余空白单元格补全逻辑,保证所有行的列数统一
内容的提问来源于stack exchange,提问作者Chinnu
相关产品推荐
相关产品推荐

