2012-04-24 53 views
0

私は次のことについて私の頭をつかむために真剣に苦労しています。私は、PHP配列に基づいて行テーブルごとに3データセルを構築したい。それは動的言い換えるように別の行を作成する必要があり、PHPの配列に基づいて動的にHTMLテーブルの行を作成します

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

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

が、4値を配列に追加されなければならない。換言すれば、アレイ内の3つの値がある場合、のような構造が存在すべきです。

<?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

モジュロを使用してください。そうですね、

正しいhtml出力にはいくつか追加する必要がありますが、「難しい」部分が行われます。

私はコードをテストしなかっただけで醜いです。

+0

あなたのコードは、印刷の前に新しい行を印刷します第3のセル;行の最後のチェックは、前にないすべてのセルを印刷した後でなければなりません。あなたは最初の行のオープニングタグと最後の行終了タグ .. –

+0

本当にありがとう、見る必要があるのと同じです。しかし、私が言ったように、機能的な "コピーアンドペースト"ソリューションを提供するよりも、モジュロの使用を実証することが重要でした。それでも、あなたは正しいと私はそれを変更しました。意図的にタグを開いたり閉じたりするコードを残しました。配列のサイズが3の倍数などでない場合、有益なtrを埋める必要もあります。 – Dariop

+0

それは私のために働いてくれました。 – Brij

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と2つのforeachループが高すぎます。あなたは思いませんか? –

+0

2つのループが高すぎると思うなら、3つをやってみてください! Saleh、コメントする前にベンチマークをしてください。これはWebのパフォーマンスにはまったく影響しません。このような単純なスクリプトを実行すると、パフォーマンスが悪くなる何百もの要素があります。彼は明らかに初心者で、私の答えは(私が思う)最も明白なものです。 – Ignas

+0

ベンチマークの必要はありません。$ more_memory_allocation + $ more_execution_tim = $ too_expensiveですが、1000要素の配列と1000人の訪問者を同時に指定してください。 –

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; 
?> 
関連する問題