Mais il arrive parfois que vous ayez besoin de mettre 2 éléments par ligne, voire 3, voire plus, pour faire une Galerie de photos, de produits, ou autre... La boucle, nous l'avons, les cellules aussi, la question est donc de savoir quand placer les balises <tr> et </tr> pour que le nombre de colonne corresponde. C'est ce que nous allons voir grace à l'opérateur modulo : "%"

En clair, si l'on divise 7 par 3, le résultat (partie entière) de la division est 2, et le reste est de 1 (3*2+1=7). C'est de cette valeur (le 1) dont nous allons avoir besoin pour déterminer où nous en sommes sur la ligne, et donc savoir s'il faut ouvrir ou fermer les <tr>.On désigne par modulo l'opération de calcul du reste de la division euclidienne. Si "a" est un entier quelconque et "n" un entier strictement positif, on écrira "a % n" pour représenter le reste de la division de "a" par "n".
Supposons un tableau à 3 colonnes (mais vous verrez que cela fonctionne quel que soit le nombre) :
Position élément | Reste de la division (Position divisé par 3)
0 1 2 | 0 1 2
3 4 5 | 0 1 2
6 7 8 | 0 1 2
Vous noterez que le reste de la division associé au premier élément de la ligne est toujours 0, et que le dernier correspond toujours au Nombre de colonnes-1. Il ne reste donc plus qu'à mettre cela en pratique pour alimenter notre galerie :<?php
$nbCols = 3; // nombre de colonnes du tableau
$cpt = 0; // compteur d'éléments
?>
<table>
<tr>
<th style="width:<?php echo round(100/$nbCols);?>%;">Colonne 1</th>
<th style="width:<?php echo round(100/$nbCols);?>%;">Colonne 2</th>
<th style="width:<?php echo round(100/$nbCols);?>%;">Colonne 3</th>
</tr>
<?php
$rs = mysql_query(...); // exécution de la requête
// Nota : on pourrait tout aussi bien parcourir les éléments d'un tableau ou les fichiers d'un dossier
while ($row=mysql_fetch_assoc($rs)) { // parcours des résultats
// début d'une ligne
if ($cpt%$nbCols==0) // on divise le nb d'élément par le nb de colonnes. Si le reste est de 0 ...
echo '<tr>'; // ..., alors on est sur le premier élément d'une ligne
// On place chaque élément dans une cellule du tableau
echo '<td>';
echo ... // affichage de tout ce qu'on veut dans la cellule
echo '</td>';
// fin d'une ligne
if ($cpt%$nbCols==($nbCols-1)) // on divise le nb d'élément par le nb de colonnes. Si le reste est de ($nbCols-1) ...
echo '</tr>'; // ..., on est sur le dernier élément d'une ligne
$cpt++; // on incrémente le compteur pour savoir où on en est
}
// Au cas où ...
if ($cpt!=0 && $cpt%$nbCols!=0) { // S'il n'y a pas eu assez de cellules dans la boucle pour finir la ligne ...
echo '<td colspan="'.($nbCols - ($cpt%$nbCols) ).'"> </td>'; // ... on complète avec une cellule vide de la bonne taille...
echo '</tr>'; // ... et on ferme la ligne
}
?>
</table>
Et voilà, l'opérateur modulo n'a plus de secret pour vous 