Bucles en php estructura de For
(PHP 4, PHP 5)
Los bucles for son los ciclos más complejos en PHP. Se comportan como sus contrapartes en C. La sintaxis de un bucle for es:
for (expr1; expr2; expr3) sentencia
La primera expresión (expr1) es evaluada (ejecutada) una vez incondicionalmente al comienzo del bucle.
En el comienzo de cada iteración, la expr2 es evaluada, Si es
TRUE
, el bucle continúa y las sentencias anidadas son ejecutadas. Si se evalúa como FALSE
, termina la ejecución del bucle.
Al final de cada iteración, la expr3 es evaluada (ejecutada).
Cada una de las expresiones puede estar vacía o contener múltiples expresiones separadas por comas. En la expr2, todas las expresiones separadas por una coma son evaluadas pero el resultado se toma de la última parte. Que la expr2 esté vacía significa que el bucle deberá ser corrido indefinidamente (PHP implícitamente lo considera como
TRUE
, como en C). Esto puede no ser tan inútil como se pudiera pensar, ya que muchas veces se quiere terminar el bucle usando una sentencia condicional break en lugar de utilizar la expresión verdadera del for.
Considere los siguientes ejemplos. Todos ellos muestran los números del 1 al 10:
<?php
for ($i = 1; $i <= 10; $i++) {
echo $i;
}
/* ejemplo 2 */
for ($i = 1; ; $i++) {
if ($i > 10) {
break;
}
echo $i;
}
$i = 1;
for (; ; ) {
if ($i > 10) {
break;
}
echo $i;
$i++;
}
for ($i = 1, $j = 0; $i <= 10; $j += $i, print $i, $i++);
?>
Por supuesto, el primer ejemplo parece ser el mejor (o quizás el cuarto), pero se puede encontrar que la posibilidad de usar expresiones vacías en los bucles for resulta útil en muchas ocasiones.
PHP también soporta la sintaxis alternativa de los dos puntos para bucles for.
for (expr1; expr2; expr3): sentencia ... endfor;
Es una cosa común a muchos usuarios iterar por medio de arrays como en el ejemplo de abajo.
<?php
/*
* Este es un array con algunos datos que se desean modificar
* cuando se corra por el bucle for.
*/
$people = Array(
Array('name' => 'Kalle', 'salt' => 856412),
Array('name' => 'Pierre', 'salt' => 215863)
);
for($i = 0; $i < sizeof($people); ++$i)
{
$people[$i]['salt'] = rand(000000, 999999);
}
?>
El problema radica en la segunda expresión del for. Este código puede ser lento porque tiene que calcular el tamaño del array en cada iteración. Dado que el tamaño nunca cambia, se pueden optimizar fácilmente usando una variable intermedia para almacenar el tamaño y usarla en el bucle en lugar del sizeof. El siguiente ejemplo ilustra esto:
<?php
$people = Array(
Array('name' => 'Kalle', 'salt' => 856412),
Array('name' => 'Pierre', 'salt' => 215863)
);
for($i = 0, $size = sizeof($people); $i < $size; ++$i)
{
$people[$i]['salt'] = rand(000000, 999999);
}
?>
Comentarios
Publicar un comentario