PHP从JSON数据生成双列表格失败问题咨询
问题排查与修正方案
你的核心问题在于表格行(<tr>)的开闭逻辑搞反了,咱们一步步拆解问题并修正:
原代码的逻辑错误
当前你判断$count % 2 == 0时才开启<tr>,但第一个元素的$count是1(奇数),这时候不会生成<tr>,直接输出<td>;第二个元素$count=2(偶数),才生成<tr>,然后输出第二个<td>,紧接着就闭合</tr>——这就导致每个<td>都被单独套进了一行,完全不符合双列的需求。
修正后的代码
function generateHtml($jsonDoc){ $html = ""; $html .= "<table>"; $count = 0; foreach ($jsonDoc as $key => $value) { $count ++; // 当是奇数位元素时,开启新行 if ($count % 2 == 1) $html .= "<tr>"; $html .= "<td>"; foreach ($value as $key => $val) { if(!empty($val)) $html .= $key.":".$val."<br />"; } $html .= "</td>"; // 当是偶数位元素时,闭合当前行 if ($count % 2 == 0) $html .= "</tr>"; } // 处理数组元素个数为奇数的情况,补全未闭合的行标签 if ($count % 2 == 1) $html .= "</tr>"; $html .= "</table>"; print($html); }
关键改动说明
- 行开启条件调整:把
<tr>的生成条件改成$count % 2 == 1(奇数位元素),这样第一个元素就会先开启一行,再输出第一个<td>。 - 行闭合逻辑保留:偶数位元素输出
<td>后立即闭合</tr>,刚好形成一行两列的结构。 - 奇数元素补全处理:如果JSON数组的元素个数是奇数(比如3个),循环结束后最后一行只开了
<tr>没闭合,所以加个判断补全</tr>,避免HTML结构错误。
用你的测试JSON数据运行这段代码,就能得到你期望的双列表格输出啦。
内容的提问来源于stack exchange,提问作者BrandonOS
相关产品推荐
相关产品推荐

