Вставьте tr после каждого третьего цикла - PullRequest
8 голосов
/ 25 января 2012

Я делаю форум на PHP. Я должен отобразить все категории форума в таблице, и для этого я использовал цикл while. Тем не менее, я хочу иметь только 3 тд в каждой строке таблицы. Чтобы пройтись по категориям, я использую цикл while с запросом, поэтому я не думаю, что смогу использовать модуль здесь.

Ответы [ 3 ]

13 голосов
/ 25 января 2012

Этот код закроет все лишние строки:

<table>
<?php
$columns = 3;
$i = 0;
while($row = mysql_fetch_array($result)){
    $i++;
    //if this is first value in row, create new row
    if ($i % $columns == 1) {
        echo "<tr>";
    }
    echo "<td>".$row[0]."</td>";
    //if this is last value in row, end row
    if ($i % $columns == 0) {
        echo "</tr>";
    }
}
//if the counter is not divisible by the number of columns, we have an open row
$spacercells = $columns - ($i % $columns);
if ($spacercells < $columns) {
    for ($j=1; $j<=$spacercells; $j++) {
        echo "<td></td>";
    }
    echo "</tr>";
}
?>
</table>
13 голосов
/ 25 января 2012

Почему вы не можете использовать модуль?Просто добавьте счетчик куда-нибудь, и если он достигнет % 3 == 0, сбросьте счетчик и сделайте все, что вам нужно.

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

$i=0;
while(guard()){
    if($i % 3 == 0){
       //ploing
    }
 $i++
}
2 голосов
/ 25 января 2012

Я не тестировал код, но логика должна работать:

<Table>
<?php
$i = 0;
while($row = mysql_fetch_array($result)){
    if($i == 0){
        echo"<TR>";
    }
    echo"<td>".$row[0]."<TD>";
    $i++;
    if($i == 3)
    {
        $i = 0;
        echo"</tr>"
    }
}
if($i ==1){
    echo "<td></td><td></td></tr>";
}
if($i ==2)
{
    echo "<td></td></tr>";
}
?>
<table>
...