2012-04-24 124 views
0

我正在认真努力地抓住以下几点。我想基于PHP数组构建每行数据表的3个数据单元格。因此,换句话说,如果在阵列中的3个值,应该有如下的结构:基于php数组动态创建HTML表格行

<?php 
$arr = array("value1","value2","value3"); 
?> 

// Expected outcome: 
<table> 
     <tr> 
      <td>value1</td> 
      <td>value2</td> 
      <td>value3</td>    
     </tr> 
</table> 

但应一个第四值被添加到阵列中,它必须动态地创建另一行,从而换句话说:

<?php 
$arr = array("value1","value2","value3","value4"); 
?> 

// Expected outcome: 
<table> 
     <tr> 
      <td>value1</td> 
      <td>value2</td> 
      <td>value3</td>    
     </tr> 
     <tr> 
      <td>value4</td> 
      <td></td> 
      <td></td>    
     </tr> 
</table> 

我真的不介意哪个解决方案,即使是php和jQuery之间的混合,但只是我可以用来实现上述目的。

预先感谢您!

回答

5

使用模数。像这样:

<table> 
<tr> 
<?php 
    $i = 1; 
    foreach ($arr as $val){ 
     $i++; 
     print '<td>'.$i.'</td>'; 
     if ($i % 3 == 0){ 
      print '</tr><tr>'^; 
     } 

    } 
?> 
</tr> 
</table> 

您将需要添加一些更多的东西了正确的HTML输出,但“硬”的部分已经完成。

不要只是复制和粘贴,我没有测试代码,它很丑。

+0

你的代码打印一个新行打印前第三个小区;行检查结束应该是在打印之前没有的所有单元格之后;除此之外,你需要注意第一排开标签和最后一排结束标签 .. – 2012-04-24 13:51:27

+0

真的,谢谢。但正如我所说的,它更多的是展示模块的使用,而不是提供功能正常的“复制和粘贴”解决方案。不过,你是对的,我改变了它。我留下了有意打开和关闭标签的代码。如果数组大小不是3的倍数,那么还需要填充有缺陷的tr,等等。 – Dariop 2012-04-24 13:56:37

+0

它对我有用,谢谢 – Brij 2017-09-27 09:50:10

2

使用array_chunk函数将数组分组,然后只做一些循环,例如,

<?php 
$arr = array("value1","value2","value3","value4"); 
echo "<table>"; 
$rows = array_chunk($arr,3); 
foreach($rows as $row) { 
    echo "<tr>"; 
    foreach($row as $cell) { 
    echo "<td>".$cell."</td>"; 
    } 
    echo "</tr>"; 
} 
echo "</table>"; 
?> 
+0

这可能有效,但它不是最佳解决方案; array_chunk和两个foreach循环太昂贵了..你不觉得?! – 2012-04-24 13:40:26

+0

是的..如果你认为两个循环太贵,请尝试三个!萨利赫在做评论前做一些基准测试。这完全不会影响网络性能。还有其他数以百计的事情搞砸了性能,并运行一个简单的脚本,这不是其中之一。除了他显然是一个新手,我的答案(我认为)是最明显的一个。 – Ignas 2012-04-24 13:54:13

+0

无需进行基准测试$ more_memory_allocation + $ more_execution_tim = $ too_expensive,但是如果您坚持要在1000个元素的数组和1000个访问者的同时做到这一点。 – 2012-04-25 05:41:55

0
<table><tr> 
<?php 
$arr = array("value1","value2","value3","value4","value5","value6","value7"); 

for($i=0;$i<count($arr)%3;$i++) 
    $arr[] = null; 

foreach($arr as $key => $val){ 

    if(($key)%3==0) 
    echo '</tr><tr>'; 

    echo '<td>'.$val.'</td>'; 

} 
?> 
</tr></table> 
0
<table> 
    <tr> 
     <?php 
     $x = 0; 
     foreach($arr as $v){ 
      if ($x % 3 == 0 && $x != 0){ 
       echo '</tr><tr>'; 
      } 

      echo '<td>'.$v.'</td>'; 
      $x++; 
     } 
     ?> 
    </tr> 
</table> 
0

这里是我的建议,这将产生将HTML格式

<table> 
    <tr>  
    <?php 
    $i = 0; 
    $items_per_row = 3; 

    foreach ($arr as $elm) { 
     echo '<td>'.$elm.'</td>'; 

     if (++$i % $items_per_row == 0 && $i < count($arr) - 1) 
      echo '</tr><tr>'; 
    } 
    ?> 
    </tr> 
</table> 
1

这是一个逻辑的实现:

<?php 
$input_array = array('a', 'b', 'c', 'd', 'e','f','g'); 
$new_array = array_chunk($input_array, 3); 

$table = '<table border="1">'; 
foreach($new_array as $value){ 
$table .= '<tr><td>'.$value[0].'</td><td>'.$value[1].'</td><td>'.$value[2].'</td> </tr>'; 
} 
$table.='</table>'; 

echo $table; 
?>