Estructuras de control: bucle forLa sintaxis del bucle for es la siguiente:
for (expresión_inicial; expresión_final; expresión_paso) {
bloque_de_sentencias
}
|
La expresión inicial se evalúa siempre. La expresión final se evalúa al principio de cada iteración: si el resultado es TRUE se ejecuta el bloque de sentencias y la expresión de paso y se evalúa nuevamente la expresión final; si el resultado es FALSE el bucle se termina.
En los bucles for más sencillos, en la expresión inicial se inicializa una variable que se evalúa en la expresión final y que se modifica en la expresión de paso, como muestra el ejemplo siguiente:
<?php
for ($i=0; $i<5; $i++) {
print "<p>$i</p>\n";
}
?>
|
<p>0</p> <p>1</p> <p>2</p> <p>3</p> <p>4</p> |
Para generar una tabla de varias filas se pueden utilizar bucles for anidados.
Supongamos que queremos generar la siguiente tabla:
<table border="1">
<caption>Tabla</caption>
<tbody>
<tr>
<th></th>
<th>1</th>
<th>2</th>
<th>3</th>
<th>4</th>
</tr>
<tr>
<th>1</th>
<td>11</td>
<td>12</td>
<td>13</td>
<td>14</td>
</tr>
<tr>
<th>2</th>
<td>21</td>
<td>22</td>
<td>23</td>
<td>24</td>
</tr>
<tr>
<th>3</th>
<td>31</td>
<td>32</td>
<td>33</td>
<td>34</td>
</tr>
</tbody>
</table>
|
|
Para identificar las partes que son susceptibles de ser generadas por bucles, buscamos las repeticiones en el código html. El resto del contenido (que en este caso son los números) debe también seguir algún patrón, para poderlo generar aprovechando las variables que controlan los bucles.
Así, se pueden identificar tres bloques:
El resto del código se generaría fuera de los bucles. El el cuadro siguiente se han marcado los bloques que generaría cada bucle.
<table border="1">
<caption>Tabla</caption>
<tbody>
<tr>
<th></th>
<th>1</th> ⌉
<th>2</th> † Bucle 1
<th>3</th> †
<th>4</th> ⌋
</tr>
<tr> ⌉
<th>1</th> |
<td>11</td> ⌉ |
<td>12</td> † Bucle 3 |
<td>13</td> † |
<td>14</td> ⌋ |
</tr> †
<tr> |
<th>2</th> |
<td>21</td> ⌉ |
<td>22</td> † Bucle 3 | Bucle 2
<td>23</td> † |
<td>24</td> ⌋ |
</tr> †
<tr> |
<th>3</th> |
<td>31</td> ⌉ |
<td>32</td> † Bucle 3 |
<td>33</td> † |
<td>34</td> ⌋ |
</tr> ⌋
</tbody>
</table>
|
El bucle 1 es un bucle simple. Los bucles 2 y 3 son bucles anidados que necesitan dos variables independientes para controlar cada uno de ellos. Los números contenidos en cada celda se pueden generar fácilmente a partir de las variables que controlan los bucles.
Así, el código PHP podría ser el siguiente:
<?php
$columnas = 4;
$filas = 3;
print "<table border=\"1\">\n"; // Abre la tabla
print " <caption>Tabla</caption>\n"; // Crea la leyenda <caption>
print " <tbody>\n"; // Abre el cuerpo de tabla <tbody>
print " <tr>\n"; // Abre la primera fila
print " <th></th>\n"; // Crea la primera celda <th> de la primera fila (vacía)
for ($j=1; $j<=$columnas; $j++) { // Bucle 1 (genera celdas <th> con número de la primera fila)
print " <th>$j</th>\n"; // Crea el resto de celdas <th> de la primera fila (con número)
}
print " </tr>\n"; // Cierra la primera fila
for ($i=1; $i<=$filas; $i++) { // Bucle 2 (genera resto de filas de la tabla)
print " <tr>\n"; // Abre la fila
print " <th>$i</th>\n"; // Crea la primera celda <th> de cada fila (con número)
for ($j=1; $j<=$columnas; $j++) { // Bucle 3 (genera celdas <td> con números)
print " <td>$i$j</td>\n"; // Crea el resto de celdas <td> de cada fila (con números)
}
print " </tr>\n"; // Cierra la fila
}
print " </tbody>\n"; // Cierra el cuerpo de tabla <tbody>
print "</table>\n"; // Cierra la tabla
?>
|
En el bucle 1, la variable que controla el bucle se ha llamado $j, aunque se podría haber llamado $i. Pero como en los bucles anidados 2 y 3 la variable que crea las celdas de cada fila se ha llamado $j, en el bucle 1 se le ha llamado también $j ya que juega el mismo papel (generar las celdas de la fila).
Esta página forma parte del curso "Páginas web con PHP" disponible en http://www.mclibre.org
Esta o a está bajo una licencia de Creative
Commons.