Diferencia entre revisiones de «Programación en PHP/Bucles»

Contenido eliminado Contenido añadido
Sin resumen de edición
Línea 13:
===While===
Sintáxis:
while (condición) sentencia;
 
Su funcionamiento es sencillo, ya que pimero se evalua que la condición sea verdadera y luego se ejecuta, hasta que la condición pase a ser falsa; una sentencia '''while''' (Español: MIENTRAS) puede que no se ejecute ni siquiera una vez, si su condición es falsa.
 
Veamos un ejemplo de su uso:
Un bucle while puede contener varias sentencia, encerrandolas entre llaves({}) o usando ésta sintáxis alternativa:
 
<?php
while (condición): sentencia
$i = 1;
...
while($i <= 3) $i += 1;
echo 'La variable $i vale: ' . $i ;
?>
Salida:
La variable $i vale: 4
Esta sintáxis de la instrucción '''while''' solo permite el uso de una sentencia dentro del bucle, en el ejemplo anterior la sentencia<tt>$i += 1 </tt> (ver [[Programación en PHP/Operadores|Operadores]]).
 
Un bucle '''while''' puede contener varias sentencia, encerrandolas entre llaves({}) o usando ésta sintáxis alternativa:
 
while (condición):
sentencia;
sentencia;
.
.
.
sentencia;
endwhile;
 
Ejemplo con múltiples sentencias:
 
{| align="center" border ="1" cellpadding="5"
! align="center" |Sintaxis 1||Sintaxis 2
|- valign="top"
|
<?php
$i = 1;
while($i <= 5):
echo "\$i = $i" . "\n";
$i += 1;
endwhile;
?>
|
<?php
$i = 1;
while($i <= 5)
{
echo "\$i = $i" . "\n";
$i += 1;
}
?>
|}
 
Intentemos ahora un ejemplo más complicado.
 
<?php
$i = 1; $mult_2_3 =0; $mult_2 =0; $mult_3 =0;
echo "Verifiquemos los múltiplos de 2 y 3 (del 1 al 10):\n";
echo "--------------------------------------------------\n";
while($i <= 10){
if(($i % 2 == 0) AND ($i % 3 == 0) )
{
echo "$i es múltiplo de 2 y de 3.\n";
$mult_2_3 += 1;
}elseif ($i % 2 == 0)
{
echo "$i es múltiplo de 2.\n";
$mult_2 += 1;
}elseif ($i % 3 == 0)
{
$mult_3 += 1;
echo "$i es múltiplo de 3.\n";
}else
{
echo "$i no es múltiplo de 2 ni de 3.\n";
}
$i += 1; //ojo: esta línea es muy importante!!!
}
echo "--------------------------------------------------\n";
echo "Entre 1 y 10 hay: \n";
echo " * '$mult_2_3' múltiplos de 2 y 3.\n";
echo " * '$mult_2' múltiplos de 2.\n";
echo " * '$mult_3' múltiplos de 3.\n";
echo "Los restantes '" . (10 - $mult_2_3 - $mult_2 - $mult_3) .
"' números no son múltiplos ni de 2 ni de 3.\n";
?>
Salida:
Verifiquemos los múltiplos de 2 y 3 (del 1 al 10):
--------------------------------------------------
1 no es múltiplo de 2 ni de 3.
2 es múltiplo de 2.
3 es múltiplo de 3.
4 es múltiplo de 2.
5 no es múltiplo de 2 ni de 3.
6 es múltiplo de 2 y de 3.
7 no es múltiplo de 2 ni de 3.
8 es múltiplo de 2.
9 es múltiplo de 3.
10 es múltiplo de 2.
--------------------------------------------------
Entre 1 y 10 hay:
* '1' múltiplos de 2 y 3.
* '4' múltiplos de 2.
* '2' múltiplos de 3.
Los restantes '3' números no son múltiplos ni de 2 ni de 3.
Analicemos el ejemplo. La variable <tt>$i</tt> actua como un ''contador'' indicandonos cuantas iteraciones han sido llevadas a cabo, además de ser usado para evaluar la condición de bucle '''while'''. Las variables <tt>$mult_2_3</tt>, <tt>$mult_2</tt> y <tt>$mult_3</tt> son tambien contadores, pero estos nos indican, respectivamente, cuantos múltiplos de 2 y 3 (simultaneamente), solo de 2, y solo de 3 se han encontrado. Una vez completadas las 10 iteraciones se muestran los valores de estas tres variables y se calcula la cantidad de números que no son múltiplos ni de 2 ni de 3.
 
 
----
 
Antes de terminar con el bucle '''while''' debemos ocuparnos de dos asuntos importantes: los bucles infinitos y la interrupción de un bucle.
 
Los bucles infinitos son aquellos en que la condición a evaluar siempre es verdadera, por lo que las iteraciones nunca se detienen. Antes de ejecutar un fragmento de código que contenga un bucle (sea '''while''',[[#Do...While|do...while]] o [[#For|for]]), es importante asegurarse de que el bucle eventualmente se detendrá. En nuestro ejemplo con números primos la sentencia <tt>$i += 1</tt> asegura que el contador <tt>$i</tt> aumente una unidad en cada iteración hasta alcanzar el valor 11, haciendo así falsa la condición con lo que se termina el bucle.
 
Aunque un bucle se termina cuando la condición se evalúa a falsa hay ocasiones en que necesitamos interumpir el bucle abruptamente. La instrucción '''break''' (Español: INTERRUPCCIÓN) interrumpe inmediatamente la ejecución del bucle y el control se pasa a la instrucción inmediatamente posterior al '''while'''. Veamos un último par de ejemplos usando '''break''':
 
{|align="center" border ="1" cellpadding="5"
!align="center" colspan="2"|Usos de break
|-
!Para romper bucles infinitos
!Para interumpur el bucle
|- valign="top"
|
<?php
$n = 1;
$i = 1;
while(true){
$i = $i + 1;
$n = $n * $i;
if ($n > 100) break;
}
echo "i = " . $i;
echo "\nn = " . $n;
?>
Salida:
i = 5
n = 120
|
<?php
$n = 1;
$i = 50;
$mensaje = "No hay múltiplos de 11 entre " .
"50 y 100. (¿no hay?)";
while($i < 100){
if ($i % 11 == 0)
{
$mensaje = "El primer múltiplo de 11 " .
"entre 50 y 100 es: " . $i;
break;
}
$i += 1;
}
echo $mensaje;
?>
Salida:
El primer múltiplo de 11 entre 50 y 100 es: 55
|}
 
===Do...While===