Bienvenido al foro.
Si imprimes los números dentro del bucle tr es obvio que se te van a repetir los números, debe ser por fuera. Ya que tienes toda la idea del ejercicio te lo dejo para que lo mejores:
Código PHP:
Ver original<table border="1">
<tr>
<td>/</td>
<?php
for ($tds = 23; $tds <= 33; $tds++) {
echo "<td>$tds</td>" . PHP_EOL;
}
?>
</tr>
<?php
for ($tr=1; $tr <= 10; $tr++) {
echo '<tr>' . PHP_EOL;
echo "<td>$tr</td>" . PHP_EOL;
for ($td = 23; $td <= 33; $td++) {
if($td % $tr == 0) {
echo '<td>*</td>' . PHP_EOL;
} else {
echo '<td>-</td>' . PHP_EOL;
}
}
echo '</tr>' . PHP_EOL;
}
?>
</table>
PD:
PHP_EOL lo uso para que se vea ordenado el código fuente.
Saludos.