PHP如何从两个数组交替生成每行4个相同元素的<tr>表格
问题描述
我有两个数组:
$arr1 = ['A','B','C']; $arr2 = [1, 2, 3];
想要实现如下表格效果:
----------------- | A | A | A | A | ----------------- | 1 | 1 | 1 | 1 | ----------------- | B | B | B | B | ----------------- | 2 | 2 | 2 | 2 | ----------------- | C | C | C | C | ----------------- | 3 | 3 | 3 | 3 | -----------------
但我尝试的代码输出不符合预期,代码如下:
<?php $arr1= ['A','B','C']; $arr2=[1, 2, 3]; $combine = array_combine($arr1, $arr2); echo "<table> "; foreach ( $combine as $i => $a) { echo "<tr> "; for ($j=0; $j < 4 ; $j++) { if ( $a % 4 == 0) { echo "</tr> <tr> "; } echo "<th>$i</th> "; echo "<td>$a</td> "; } echo "</tr> "; } echo "</table> "; ?>
问题分析
你的代码存在几个关键问题:
- 使用
array_combine后,每次循环会同时处理$arr1的元素(键)和$arr2的元素(值),但你在内部循环里同时输出<th>和<td>,导致一行里同时出现字母和数字,不符合每行只显示单一元素的需求。 - 内部的
if ($a % 4 == 0)判断完全无效,因为$a的值是1、2、3,永远不会被4整除,这个逻辑是多余的。 - 错误混用了
<th>和<td>标签,需求里每行都是相同的内容,不需要区分表头和普通单元格。
解决方案
不需要合并数组,直接遍历两个数组的索引,对每个索引分别生成两行:一行是$arr1对应元素重复4次,另一行是$arr2对应元素重复4次。同时添加CSS样式,让表格呈现你需要的分隔线效果。
修正后的代码:
<?php $arr1 = ['A','B','C']; $arr2 = [1, 2, 3]; // 获取数组长度,假设两个数组长度一致 $length = count($arr1); ?> <style> table { border-collapse: collapse; border: 1px solid #000; } td { border: 1px solid #000; padding: 0 10px; } </style> <table> <?php for ($i = 0; $i < $length; $i++): ?> <!-- 输出arr1当前元素的行 --> <tr> <?php for ($j = 0; $j < 4; $j++): ?> <td><?php echo $arr1[$i]; ?></td> <?php endfor; ?> </tr> <!-- 输出arr2当前元素的行 --> <tr> <?php for ($j = 0; $j < 4; $j++): ?> <td><?php echo $arr2[$i]; ?></td> <?php endfor; ?> </tr> <?php endfor; ?> </table>
效果说明
这段代码会生成符合你需求的表格:
- 每一行包含4个相同的元素,交替显示
$arr1和$arr2的对应项。 - CSS样式让表格的边框和单元格边框显示为实线,模拟你给出的文本表格效果。
内容的提问来源于stack exchange,提问作者Mon Freecs
相关产品推荐
相关产品推荐

