2012-03-19 64 views
0
动态表的最有效方法

我目前正在下面一个动态表:产生在PHP

echo '<table border=1>'; 
echo '<tr align="center" width="140"><td>column 1 &rarr; 
<br />&darr; column 2</td>'; 
echo "<td width='70'>{$c1}</td>"; 
echo "<td width='70'>{$c2}</td>"; 
echo "<td width='70'>{$c3}</td>"; 
echo "<td width='70'>{$c4}</td>"; 
echo "<td width='70'>{$c5}</td>"; 
echo '</tr>'; 
for ($i = $min; $i <= $max; $i+=5) { 
    echo '<tr align="center">'; 
    echo '<td>'.$i.'</td> 
    <td>'.$c1*$i.'</td> 
    <td>'.$c2*$i.'</td> 
    <td>'.$c3*$i.'</td> 
    <td>'.$c4*$i.'</td> 
    <td>'.$c5*$i.'</td>'; 
    echo '</tr>'; 
} 
echo '</table>'; 

我只是想知道是否有产生它的一个更有效的节省时间的方法?

该表是从以下输入创建

min, max, c1, c2, c3, c4, c5 

其中,如果例如:

min=30, max=45, c1=5, c2=10, c3=15, c4=20, c5=25 

表可能看起来像:

enter image description here

在此先感谢!

回答

1

我会采取一些不同的方法。起初,我不喜欢有计算(甚至简单的)和view/result/html代码混合的想法。所以我会分开这些任务。通常在大多数更大的应用程序中,这种表生成将不可能(如MVC框架),或者至少不是首选。我也搬出了桌子的造型。

接下来,我不喜欢数字值,数据列表看起来像一个数组。我没有足够的元信息,无论这是否正确,所以我只是将它作为一个数组,因为它看起来有意义。现在列数量也很灵活。

查看代码(so PHP)我总是尽可能保持紧凑但可读性。主要是简单的代码,不是很多循环,没有很多不同的功能只是基本的。所以不是for循环与特定的步骤,因为它不相关。视图部分应该在获取数据时显示数据。

<?PHP 

//settings 
$min=30; 
$max=45; 
$step=5; 
$cols=array(5,10,15,20,25); 

//result array 
$data=array(); 

//data calculation 
for($i = $min; $i <= $max; $i+=$step) { 
    foreach($cols AS $col => $val) { 
    $data[$i][$col]=$val*$i; 

    } 
} 

//html generation 
?> 

<style type="text/css"> 
    th, td { 
     text-align: center; 
     vertical-align: top; 
    } 
</style> 
<table border=1> 
    <thead> 
     <tr> 
      <th scope="row">column 1 &rarr;</th> 
      <?PHP 
       foreach($cols AS $val) { 
        echo '<th rowspan=2 scope="col">'.$val.'</th>'; 
       } 
      ?> 
     </tr> 
     <tr> 
      <th scope="col">&darr; column 2</th> 
     </tr> 
    </thead> 
    <tbody> 
     <?PHP foreach($data AS $i => $row) { ?> 
      <tr scope="row"> 
       <td><?PHP echo $i; ?></td> 
       <td><?PHP echo implode('</td><td>', $row); ?></td> 
      </tr> 
     <?PHP } ?> 
    </tbody> 
</table> 

希望部分对您的项目很有用。希望有一些。我喜欢写出相当多的缩进/制表符/换行符,但是您可以随意设置HTML的样式。除此之外,我还总是添加与您的问题不同的表格头部,主体和范围,但是按照所要求的布局提供相同的输出。

2

我不会echo的HTML,但只是从PHP填充表中的值。这使得它可读性更高。

至于耗时较少,实际上没有什么可以省略的,但是再次,它只需要几分钟时间就可以完成。

<table> 
    <tr> 
     <td>Title</td> 
     <td><?php echo $c1 ?></td> 
     <td><?php echo $c2 ?></td> 
     <td><?php echo $c3 ?></td> 
     <td><?php echo $c4 ?></td> 
     <td><?php echo $c5 ?></td> 
    </tr> 

    <?php for ($i = $min; $i <= $max; $i+=5): ?> 

     <tr> 
      <td><?php echo $i ?></td> 
      <td><?php echo $c1 * $i ?></td> 
      <td><?php echo $c2 * $i ?></td> 
      <td><?php echo $c3 * $i ?></td> 
      <td><?php echo $c4 * $i ?></td> 
      <td><?php echo $c5 * $i ?></td> 
     </tr> 

    <?php endfor; ?> 
</table> 
1

确实没有更快捷的制作表格的方法。然而,我会建议,如果你要输出那么多的HTML,你将退出PHP模式来清理它们。也许改变这种:

echo "<td width='70'>{$c1}</td>"; 
echo "<td width='70'>{$c2}</td>"; 
echo "<td width='70'>{$c3}</td>"; 
echo "<td width='70'>{$c4}</td>"; 
echo "<td width='70'>{$c5}</td>"; 

... INTO ...

<td width='70'><?=$c1?></td> 
<td width='70'><?=$c2?></td> 
<td width='70'><?=$c3?></td> 
<td width='70'><?=$c4?></td> 
<td width='70'><?=$c5?></td>