Tu fais un compteur et à chaque fois que c'est divisible par trois, tu fais une nouvelle ligne.
Pour savoir si un nombre A est divisible par un nombre B, tu peux utiliser l'opération "modulo" (qui signifie "reste de la division entière"). Si A modulo B est égal à 0, cela veut dire que A est divisible par B (ou que le reste de la division de A par B est nul).
En PHP, l'opération modulo est le pourcent : %.
Bloc de code:
<?php
$a = 27;
$b = 3;
$c = $a % $b;
if ($c == 0)
{
// $a est divisible par $b
}
?>
En l'occurence, tu initialises un compteur à 1, tu l'incrémentes à chaque produit, et tu testes à chaque itération, si ton compteur modulo 3 est égal à 0. Si c'est le cas, tu commences une nouvelle ligne.
Bloc de code:
<table>
<?php
for ($i = 0 ; $i < 20 ; $i++)
{
if (($i % 3) == 0)
{
echo "<tr>";
}
echo "<td>blabla</td>";
if (($i % 3) == 2)
{
echo "</tr>";
}
}
?>
</table>
Ce que je fais là, c'est dire que si le compteur $i (initialisé à 0) est divisible par 3, alors on ouvre une balise <tr>. Ensuite, on affiche les <td></td>, puis si le reste de la division de $i par 3 est égal à 2, on ferme la ligne avec un </tr>.
En situation réelle, ça donnerait (ce qui est affiché est en rouge) :
première boucle :
$i = 0, donc :
- test : $i % 3 == 0 ? oui donc on affiche
<tr>
- affichage de
<td>blabla</td>
- test : $i % 3 == 2 ? non, donc on fait rien
deuxième boucle :
$i = 1, donc :
- test : $i % 3 == 0 ? non, donc on fait rien
- affichage de
<td>blabla</td>
- test : $i % 3 == 2 ? non, donc on fait rien
troisième boucle :
$i = 2, donc :
- test : $i % 3 == 0 ? non, donc on fait rien
- affichage de
<td>blabla</td>
- test : $i % 3 == 2 ? oui, donc on affiche
</tr>
quatrième boucle :
$i = 3, donc :
- test : $i % 3 == 0 ? oui donc on affiche
<tr>
- affichage de
<td>blabla</td>
- test : $i % 3 == 2 ? non, donc on fait rien
etc.
Si tu regardes ce qui est noté en rouge, on a bien un truc du genre
<tr><td>blabla</td><td>blabla</td><td>blabla</td></tr>
<tr>...
Par contre, tu dois pouvoir éviter PHP en utilisant les CSS. Génère simplement une liste de <div> (ou de <li>) auquelx tu donnes une certaine largeur (on va dire 50px), et tu mets tout ça dans un conteneur trois fois plus large (150px). En utilisant les styles float:left ou display:inline, tu dois pouvoir t'arranger pour qu'il n'y a que trois éléments par ligne (chaque élément faisant 50px, il n'y en a que trois qui entrent dans une largeur de 150px).