我可以修改我的列,以便根据行中的项目数量添加colspan
吗?
方案:
假设我有5个项目,我需要一行/ 4列,下一行1列,使用colspan =“4”
假设我有6个项目,我需要1行/ 4列,下一行,2列,使用colspan =“2”
假设我有7个项目,我需要1行/ 4列,下一行,2列没有colspan,+ 1列colspan =“2”
这是我现有的代码:
echo '<table width="100%" cellpadding="10" cellspacing="5">' . PHP_EOL;
$colSpan = 4;
$rows = 0;
for($i = 0; $i < $tmpCt; $i++) {
// At column 0 you create a new row <tr>
if($i % $colSpan == 0) {
$rows++;
echo "<tr>\n";
}
// if only 1 item in the row, need to add colspan="4", 2 items colspan="2" for 2 <td>'s, 3 items 1 @ colspan="2" + 2 <td>'s
echo '<td width="25%" align="center" valign="middle">' . $tmpRet[$i]['sponName'] . '</td>' . PHP_EOL;
// At column 3 you end the row </tr>
echo $i % $colSpan == 3 ? "</tr>\n" : "";
}
// Say you have 5 columns, you need to create 3 empty <td> to validate your table!
for($j = $i; $j < ($colSpan * $rows); $j++) {
echo "<td> </td>\n";
}
// Add the final <tr>
if(($colSpan * $rows) > $i) {
echo "</tr>\n";
}
echo '</table>';
答案 0 :(得分:4)
嗯,当算术有用时!
你需要的是在每个级别使用模运算。
这是我的解决方案:
$tmpRet = array(
array(1),
array(1, 2, 3),
array(1, 2, 3, 4, 5, 6, 7),
array(1, 2, 3, 4, 5),
array(1, 2),
array(1, 2, 3, 4, 5, 6),
array(),
array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16),
array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
);
$lencol = count($tmpRet);
echo '<table border="1" width="800px" cellpadding="10" cellspacing="5">'.PHP_EOL;
$colspan = 4;
for($i = 0; $i < $lencol; $i++) {
$bg = 'style="background-color: #'.rand(100, 999).'"';
$row = $tmpRet[$i];
$lc = count($row);
$offset = 0;
if ($lc>$colspan) {
$ct = floor($lc/$colspan);
$offset = $ct * $colspan;
$m = 0;
for ($k = 0; $k<$ct; $k++) {
echo '<tr '.$bg.' >';
for ($l = 0; $l<$colspan; $l++) {
echo '<td>'.$row[$m].'</td>';
$m++;
}
echo '<tr>';
}
}
$mod = $lc % $colspan;
switch ($mod) {
case 1:
echo '<tr '.$bg.' ><td colspan="4">'.$row[$offset].'</td></tr>';
break;
case 2:
echo '<tr '.$bg.' ><td colspan="2">'.$row[$offset].'</td><td colspan="2">'.$row[$offset+1].'</td></tr>';
break;
case 3:
echo '<tr '.$bg.' ><td>'.$row[$offset].'</td><td>'.$row[$offset+1].'</td><td colspan="2">'.$row[$offset+2].'</td></tr>';
break;
}
}
echo '</table>';
这就是它的样子:
希望这有帮助
编辑:这仅适用于$colspan=4
,如果您需要更加动态的事情,请考虑用其他内容替换switch语句...也许是嵌套循环...
答案 1 :(得分:1)
我创建了一个通用函数,它将数组和列数作为输入,并在问题中执行您的要求。我从我这边测试过它。请测试一下,如果发现任何问题,请告诉我
<?php
function test($arr,$colspan) {
$count = count($arr);
$extra_elements = $count % $colspan;
$num_of_rows=($count-$extra_elements)/$colspan;
//print $extra_elements . " hhhhh" . $num_of_rows;
$current_count = 0;
print "<table>";
for($i=0;$i<$num_of_rows;$i++) {
print "<tr>";
for($j=0;$j<$colspan;$j++) {
$bg = 'style="background-color: #'.rand(100, 999).'"';
print "<td $bg>" . $arr[$current_count] . "</td>";
$current_count++;
}
print "</tr>";
}
if($extra_elements>0) {
print "<tr>";
$divisor = $colspan%$extra_elements;
if($divisor==0 && $extra_elements!=1) {
$last_row_span = $colspan/$extra_elements;
while($current_count<$count) {
$bg = 'style="background-color: #'.rand(100, 999).'"';
print "<td colspan='$last_row_span' $bg>" . $arr[$current_count] . "</td>";
$current_count++;
}
}
else {
$j=0;
while($current_count<$count-1) {
$bg = 'style="background-color: #'.rand(100, 999).'"';
print "<td $bg>" . $arr[$current_count] . "</td>";
$current_count++;
$j++;
}
$last_row_span = $colspan-$j;
$bg = 'style="background-color: #'.rand(100, 999).'"';
print "<td colspan='$last_row_span' $bg>" . $arr[$current_count] . "</td>";
}
print "</tr>";
}
print "</table>";
}
$arr=array(0,1);
test($arr,4);
?>