2012-01-25 13 views
7

Sto creando un forum in PHP. Devo visualizzare tutte le categorie del forum in una tabella, e per farlo, ho usato un ciclo while. Tuttavia, voglio avere solo 3 td in ogni fila di tavoli. Per scorrere tra le categorie, sto usando un ciclo while con la query, quindi non penso di poter usare il modulo qui.Inserire tr dopo il terzo ciclo

+0

mostraci il tuo codice –

+0

Si potrebbe usare l'operatore di modulo '%' semplicemente creando una variabile di incremento '$ i = 0' prima del ciclo e incrementando' ++ $ i' in ogni iterazione del ciclo while. – rdlowrey

risposta

13

Perché non è possibile utilizzare il modulo? Basta aggiungere un contatore da qualche parte, e se colpisce % 3 == 0 azzera il contatore e fai il tuo lavoro.

Potrebbe essere necessario aggiungere un extra se è il primo e l'ultimo e cose del genere, ma non c'è motivo per non utilizzare un modulo con un po 'di tempo.

$i=0; 
while(guard()){ 
    if($i % 3 == 0){ 
     //ploing 
    } 
$i++ 
} 
+0

Ah, geniale! Devo imparare come funziona questo modulo. – user1169875

+7

+1 per effetti sonori eccellenti ... – squarecandy

2

Non ho ancora testato il codice, ma la logica dovrebbe funzionare:

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

Questo codice si chiuderà tutte le righe in più:

<table> 
<?php 
$i = 0; 
while($row = mysql_fetch_array($result)){ 
    $i++; 
    //if this is first value in row, create new row 
    if ($i % 3 == 1) { 
     echo "<tr>"; 
    } 
    echo "<td>".$row[0]."</td>"; 
    //if this is third value in row, end row 
    if ($i % 3 == 0) { 
     echo "</tr>"; 
    } 
} 
//if the counter is not divisible by 3, we have an open row 
$spacercells = 3 - ($i % 3); 
if ($spacercells < 3) { 
    for ($j=1; $j<=$spacercells; $j++) { 
     echo "<td></td>"; 
    } 
    echo "</tr>"; 
} 
?> 
</table> 
+0

Grazie amico! Questa community è assolutamente la più utile che ho trovato! – user1169875