2012-04-24 129 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; 
?>