Hola Danicnv. La verdad es que tu tabla, aunque tiene una apariencia sencilla, tiene cierta complejidad. Aquí te dejo el código explicado para poder usar el número final y el número de columnas que quieras:
Código PHP:
<html>
<head>
<title>Test PHP</title>
<style type="text/css">
table, tr, td{
border: 1px solid #000;
}
.color1{
background-color: #ddd;
color: #333;
}
.color2{
background-color: #aaa;
color: #000;
}
</style>
</head>
<body>
<table>
<tr>
<?php
$firstIndex = 1; // Controla el fondo de la primera celda de cada fila
$actualIndex = 1; // Controla el fondo de cada celda
$columnsNumber = 4; // Establece el número de columnas
$lastNumber = 42; // Establece el último numero del contador
$sumaFila = 0; // Contiene la suma de los numero de una fila
$columnIndex = 1; // Controla el número de columna (para utilizarla
// como índice en el array de suma de Columnas)
// Con este for inicializamos un array que almacena la suma
// de los números de cada columna
for ($iter = 1; $iter <= $columnsNumber; $iter++) {
$sumaColumnas[$iter] = 0;
}
for ($iter = 1; $iter <= $lastNumber; $iter++) {
echo $iter % $columnsNumber == 1 ? "<tr>" : "";
// Mientras no sea la última columna
if ($iter % $columnsNumber != 0) {
// Muestra el número actual
echo '<td class="color' . $actualIndex . '">' . $iter . '</td>';
// Alterna el índice para el fondo entre 1 y 2
$actualIndex = $actualIndex == 1 ? 2 : 1;
// Suma el número del contador a la suma de la fila
$sumaFila += $iter;
// Suma el número del contador a la suma de la columa
$sumaColumnas[$columnIndex] += $iter;
// Suma 1 al contador
$columnIndex++;
// Si es la última columna
} else {
// Suma el número del contador a la suma de la fila
$sumaFila += $iter;
// Suma el número del contador a la suma de la columa
$sumaColumnas[$columnIndex] += $iter;
// Generamos la última celda de fila para el contador
echo '<td class="color' . $actualIndex . '">' . $iter . '</td>';
// Generamos la celda del resultado de la suma de fila
echo '<td>' . $sumaFila . '</td>';
// Cerramos la columna
echo "</tr>";
// Alternamos el índice del fondo de la primera celda
// Si la anterior era 1, ahora es 2 y viceversa
$firstIndex = $firstIndex == 1 ? 2 : 1;
// Le asignamos el mismo valor al índice que controla
// el fondo de todas las celdas
$actualIndex = $firstIndex;
// Reiniciamos el índice de la columna a 1
$columnIndex = 1;
// Vaciamos la suma de fila
$sumaFila = 0;
}
}
// Si al terminar el contador la fila no tiene celdas suficientes
// la rellenamos con celdas en blanco
while ($columnIndex > 1) {
echo "<td> </td>";
if ($columnIndex % $columnsNumber == 0) {
echo "<td> </td></tr>";
$columnIndex = 1;
} else {
$columnIndex++;
}
}
// Finalmente generamos la fila con los resultados de las
// sumas de cada una de las columnas
echo "<tr>";
for ($iter = 1; $iter <= $columnsNumber; $iter++) {
echo "<td>" . $sumaColumnas[$iter] . "</td>";
}
echo "<td> </td></tr>";
?>
</table>
</body>
</html>
Espero que te valga. Un saludo y ánimo.