Prueba así:
Código PHP:
for ($i=1; $i<loquesea; $i++){
if ($i%3=1){
echo '<tr>';
}
//Aquí imprimes la celda
if ($i%3==0){
echo '</tr>';
}
}
No lo he probado. Si te da algún error postea el código html que te genera.
Mientras escrivia se me ha avanzado Hidek1. La manera de realizar la comprobación es mejor la suya, pero solo veo un pequeño problema y es que si en la última iteracion se imprimie el </tr><tr> se va a quedar una fila vacía. En mi código no queda una fila vacía pero si que puede quedar una fila abierta en caso de que los productos no sean divisibles por 3.
Deberías hacer una comprobación después del if para saber si tienes que cerrar la última fila o no.