2012-04-24 3 views
0

Я серьезно пытаюсь схватить голову вокруг следующего. Я хочу построить 3 ячейки данных для каждой таблицы строк на основе массива PHP. Итак, другими словами, если есть 3 значения в массиве, должна быть структура, как:Динамически создавать строки таблицы HTML на основе php-массива

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

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

но должен 4-ое значение добавляется в массив, он должен динамически создать еще одну строку, так и в других словах:

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

Используйте modulo. Как так:

<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

код печатает новую строку перед печатью третья ячейка; проверка конца строки должна быть после печати всех ячеек не раньше; кроме того, вам нужно следить за первым знаком открытия и последней меткой закрытия строки .. –

+0

true, спасибо. Но, как я уже сказал, речь шла скорее о демонстрации использования modulo, чем о предоставлении эффективного «копирования и вставки». Тем не менее, вы правы, и я изменил его. Я умышленно оставил код об открытии и закрытии тегов. Также необходимо заполнить недопустимые tr, если размер массива не кратен 3 и т. Д. – 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 и две петли foreach слишком дороги. Разве вы не думаете ?! –

+0

Да, правильно .. если вы считаете, что две петли слишком дороги, попробуйте сделать три! Салех, сделайте некоторые бенчмаркинга, прежде чем комментировать. Это не повлияет на производительность сети вообще. Есть сотни других вещей, которые завинчивают производительность и запускают простой скрипт, как это не один из них. Кроме того, он, очевидно, новичок, и мой ответ (я думаю) является наиболее очевидным. – 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; 
?> 
Смежные вопросы