Estructuras y bucles de control de PHP: if, else, for, foreach, while, y más
Spanish (Español) translation by Luis Chiabrera (you can also view the original English article)
Hoy vamos a discutir las estructuras de control y los bucles en PHP. Le mostraré cómo usar todas las estructuras de control principales que son compatibles con PHP, como if, else, for, foreach, while y más.
¿Qué es una estructura de control?
En términos simples, una estructura de control le permite controlar el flujo de ejecución de código en su aplicación. Generalmente, un programa se ejecuta secuencialmente, línea por línea, y una estructura de control le permite alterar ese flujo, generalmente dependiendo de ciertas condiciones.
Las estructuras de control son características principales del lenguaje PHP que permiten que su script responda de manera diferente a diferentes entradas o situaciones. Esto podría permitirle a su script dar diferentes respuestas basadas en la entrada del usuario, el contenido del archivo u otros datos.
El siguiente diagrama de flujo explica cómo funciona una estructura de control en PHP.



Como puede ver en el diagrama anterior, primero se comprueba una condición. Si la condición es verdadera, se ejecutará el código condicional. Lo importante a tener en cuenta aquí es que la ejecución del código continúa normalmente después de la ejecución del código condicional.
Consideremos el siguiente ejemplo.



En el ejemplo anterior, el programa verifica si el usuario ha iniciado sesión o no. En función del estado de inicio de sesión del usuario, se los redireccionará a la página de inicio de sesión o a la página Mi cuenta. En este caso, una estructura de control finaliza la ejecución del código al redirigir a los usuarios a una página diferente. Esta es una habilidad crucial del lenguaje PHP.
PHP soporta varias estructuras de control diferentes:
ifelseelseifswitchwhile-
do-while forforeach- y más
Echemos un vistazo a algunas de estas estructuras de control con ejemplos.
Ir a través de las diferentes estructuras de control
En la sección anterior, aprendimos los conceptos básicos de las estructuras de control en PHP y su utilidad en el desarrollo de aplicaciones. En esta sección, veremos un par de estructuras de control importantes que terminará usando con frecuencia en el desarrollo diario de su aplicación.
If
La construcción if le permite ejecutar un fragmento de código si la expresión provista junto con ella se evalúa como verdadera.
Echemos un vistazo al siguiente ejemplo para entender cómo funciona realmente.
1 |
<?php
|
2 |
$age = 50; |
3 |
|
4 |
if ($age > 30) |
5 |
{
|
6 |
echo "Your age is greater than 30!"; |
7 |
}
|
8 |
?>
|
¡El ejemplo anterior debe dar salida a Tu edad es mayor a 30! mensaje desde que la expresión se evalúa como verdadera. De
hecho, si desea ejecutar solo una sola instrucción, el ejemplo anterior
puede reescribirse como se muestra en el siguiente fragmento de código
sin corchetes.
1 |
<?php
|
2 |
$age = 50; |
3 |
|
4 |
if ($age > 30) |
5 |
echo "Your age is greater than 30!"; |
6 |
?>
|
Por otro lado, si tiene más de una instrucción para ejecutar, debe usar corchetes, como se muestra en el siguiente fragmento de código.
1 |
<?php
|
2 |
if (is_array($user)) |
3 |
{
|
4 |
$user_id = isset($user['user_id']) ? $user['user_id'] : ''; |
5 |
$username = isset($user['username']) ? $user['username'] : ''; |
6 |
// and more statements...
|
7 |
}
|
8 |
?>
|
Else
En la
sección anterior, analizamos la construcción if, que le permite ejecutar
un fragmento de código si la expresión se evalúa como verdadera. Por otro lado, si la expresión se evalúa como falsa, no hará nada. La mayoría de las veces, también desea ejecutar un fragmento de código diferente si la expresión se evalúa como falsa. Ahí es donde la declaración de else entra en la imagen.
Siempre se utiliza la sentencia else junto con una sentencia if. Básicamente, puede definirlo como se muestra en el siguiente pseudo código.
1 |
if (expression) |
2 |
{
|
3 |
// code is executed if the expression evaluates to TRUE
|
4 |
}
|
5 |
else
|
6 |
{
|
7 |
// code is executed if the expression evaluates to FALSE
|
8 |
}
|
Revisemos el ejemplo anterior para entender cómo funciona.
1 |
<?php
|
2 |
$age = 50; |
3 |
|
4 |
if ($age < 30) |
5 |
{
|
6 |
echo "Your age is less than 30!"; |
7 |
}
|
8 |
else
|
9 |
{
|
10 |
echo "Your age is greater than or equal 30!"; |
11 |
}
|
12 |
?>
|
Entonces, cuando tiene dos opciones, y una de ellas debe ejecutarse, puede usar la construcción if-else.
Else If
Podemos considerar la sentencia elseif como una extensión de la construcción if-else. Si tiene más de dos opciones para elegir, puede usar la declaración elseif.
Estudiemos la estructura básica de la sentencia elseif, como se muestra en el siguiente pseudo código.
1 |
if (expression1) |
2 |
{
|
3 |
// code is executed if the expression1 evaluates to TRUE
|
4 |
}
|
5 |
elseif (expression2) |
6 |
{
|
7 |
// code is executed if the expression2 evaluates to TRUE
|
8 |
}
|
9 |
elseif (expression3) |
10 |
{
|
11 |
// code is executed if the expression3 evaluates to TRUE
|
12 |
}
|
13 |
else
|
14 |
{
|
15 |
// code is executed if the expression1, expression2 and expression3 evaluates to FALSE, a default choice
|
16 |
}
|
Nuevamente, tratemos de entenderlo usando un ejemplo del mundo real.
1 |
<?php
|
2 |
$age = 50; |
3 |
|
4 |
if ($age < 30) |
5 |
{
|
6 |
echo "Your age is less than 30!"; |
7 |
}
|
8 |
elseif ($age > 30 && $age < 40) |
9 |
{
|
10 |
echo "Your age is between 30 and 40!"; |
11 |
}
|
12 |
elseif ($age > 40 && $age < 50) |
13 |
{
|
14 |
echo "Your age is between 40 and 50!"; |
15 |
}
|
16 |
else
|
17 |
{
|
18 |
echo "Your age is greater than 50!"; |
19 |
}
|
20 |
?>
|
Como puede ver en el ejemplo anterior, tenemos varias condiciones, por lo que hemos usado una serie de sentencias elseif. En el caso de que todas las condiciones de if se evalúen como falsas, ejecuta el código provisto en la última instrucción else.
Cambiar
La instrucción de cambio es algo similar a la instrucción elseif que acabamos de discutir en la sección anterior. La única diferencia es la expresión que se está comprobando.
En el caso
de la sentencia elseif, tiene un conjunto de condiciones diferentes y se
ejecutará una acción apropiada en función de una condición. Por otro lado, si desea comparar una variable con valores diferentes, puede usar la instrucción switch.
Como de costumbre, un ejemplo es la mejor manera de entender la instrucción switch.
1 |
<?php
|
2 |
$favourite_site = 'Code'; |
3 |
|
4 |
switch ($favourite_site) { |
5 |
case 'Business': |
6 |
echo "My favourite site is business.tutsplus.com!"; |
7 |
break; |
8 |
case 'Code': |
9 |
echo "My favourite site is code.tutsplus.com!"; |
10 |
break; |
11 |
case 'Web Design': |
12 |
echo "My favourite site is webdesign.tutsplus.com!"; |
13 |
break; |
14 |
case 'Music': |
15 |
echo "My favourite site is music.tutsplus.com!"; |
16 |
break; |
17 |
case 'Photography': |
18 |
echo "My favourite site is photography.tutsplus.com!"; |
19 |
break; |
20 |
default: |
21 |
echo "I like everything at tutsplus.com!"; |
22 |
}
|
23 |
?>
|
Como puede
ver en el ejemplo anterior, queremos verificar el valor de la variable $
favourite_site y, en función del valor de la variable $ favourite_site,
queremos imprimir un mensaje.
Para cada valor que desee verificar con la variable $ favourite_site, debe definir el bloque case. Si el valor coincide con un caso, se ejecutará el código asociado con ese bloque de caso. Después de eso, debe usar la instrucción break para finalizar la ejecución del código. Si no usa la instrucción break, la ejecución del script continuará hasta el último bloque en la instrucción switch.
Finalmente,
si desea ejecutar un fragmento de código si el valor de la variable no
coincide con ningún caso, puede definirlo en el bloque default. Por supuesto, no es obligatorio, es solo una forma de proporcionar un caso predeterminado.
Así que esa es la historia de las estructuras de control condicional. Discutiremos los bucles en PHP en la siguiente sección.
Bucles
Los bucles en PHP son útiles cuando desea ejecutar un fragmento de código repetidamente hasta que una condición se evalúe como falsa. Por lo tanto, el código se ejecuta repetidamente siempre que una condición se evalúe como verdadera y, tan pronto como la condición se evalúe como falsa, la secuencia de comandos continúa ejecutando el código después del bucle.
El siguiente diagrama de flujo explica cómo funcionan los bucles en PHP.



Como puede ver en la captura de pantalla anterior, un bucle contiene una condición. Si la condición se evalúa como verdadera, se ejecuta el código condicional. Después de la ejecución del código condicional, el control vuelve a la condición de bucle y el flujo continúa hasta que la condición se evalúa como falsa.
En esta sección, veremos los diferentes tipos de bucles admitidos en PHP.
Bucle While
El
bucle while se usa cuando se desea ejecutar un fragmento de código
repetidamente hasta que la condición while se evalúa como falsa.
Puedes definirlo como se muestra en el siguiente pseudo código.
1 |
while (expression) |
2 |
{
|
3 |
// code to execute as long as expression evaluates to TRUE
|
4 |
}
|
Veamos un ejemplo del mundo real para comprender cómo funciona el bucle while en PHP.
1 |
<?php
|
2 |
$max = 0; |
3 |
echo $i = 0; |
4 |
echo ","; |
5 |
echo $j = 1; |
6 |
echo ","; |
7 |
$result=0; |
8 |
|
9 |
while ($max < 10 ) |
10 |
{
|
11 |
$result = $i + $j; |
12 |
|
13 |
$i = $j; |
14 |
$j = $result; |
15 |
|
16 |
$max = $max + 1; |
17 |
echo $result; |
18 |
echo ","; |
19 |
}
|
20 |
?>
|
Si está
familiarizado con la serie de Fibonacci, puede reconocer lo que hace el
programa anterior: genera la serie de Fibonacci para los primeros diez
números. El bucle while se usa generalmente cuando no se sabe la cantidad de iteraciones que se llevarán a cabo en un bucle.
Bucle Do-While
El bucle
do-while es muy similar al bucle while, con la única diferencia de que
la condición while se verifica al final de la primera iteración. Por
lo tanto, podemos garantizar que el código de bucle se ejecute al menos
una vez, independientemente del resultado de la expresión while.
Echemos un vistazo a la sintaxis del bucle do-while.
1 |
do
|
2 |
{
|
3 |
// code to execute
|
4 |
} while (expression); |
Vayamos a un mundo real para comprender posibles casos de uso en los que puede usar el bucle do-while.
1 |
<?php
|
2 |
$handle = fopen("file.txt", "r"); |
3 |
if ($handle) |
4 |
{
|
5 |
do
|
6 |
{
|
7 |
$line = fgets($handle); |
8 |
|
9 |
// process the line content
|
10 |
|
11 |
} while($line !== false); |
12 |
}
|
13 |
fclose($handle); |
14 |
?>
|
En el ejemplo anterior, estamos intentando leer un archivo línea por línea. En primer lugar, hemos abierto un archivo para su lectura. En nuestro caso, no estamos seguros de si el archivo contiene algún contenido. Por lo tanto, debemos ejecutar la función fgets al menos una vez para verificar si un archivo contiene algún contenido. Así que podemos usar el bucle do-while aquí. do-while evalúa la condición después de la primera iteración del bucle.
Blucle For
Generalmente, el bucle for se usa para ejecutar un fragmento de código por un número específico de veces. En
otras palabras, si ya conoce la cantidad de veces que desea ejecutar un
bloque de código, es el bucle for que es la mejor opción.
Echemos un vistazo a la sintaxis del bucle for.
1 |
for (expr1; expr2; expr3) |
2 |
{
|
3 |
// code to execute
|
4 |
}
|
La expresión expr1 se usa para inicializar variables, y siempre se ejecuta. La expresión expr2 también se ejecuta al comienzo de un bucle, y si se evalúa como verdadera, se ejecuta el código de bucle. Después de la ejecución del código de bucle, se ejecuta el expr3. Generalmente, el expr3 se usa para alterar el valor de una variable que se usa en la expresión expr2.
Veamos el siguiente ejemplo para ver cómo funciona.
1 |
<?php
|
2 |
for ($i=1; $i<=10; ++$i) |
3 |
{
|
4 |
echo sprintf("The square of %d is %d.</br>", $i, $i*$i); |
5 |
}
|
6 |
?>
|
El programa anterior produce el cuadrado de los primeros diez números. Inicializa $ i a 1, se repite mientras $ i sea menor o igual a 10, y agrega 1 a $ i en cada iteración.
For Each
El bucle foreach se utiliza para iterar sobre variables de matriz. Si tiene una variable de matriz y desea recorrer cada elemento de esa matriz, el bucle foreach es la mejor opción.
Echemos un vistazo a un par de ejemplos.
1 |
<?php
|
2 |
$fruits = array('apple', 'banana', 'orange', 'grapes'); |
3 |
foreach ($fruits as $fruit) |
4 |
{
|
5 |
echo $fruit; |
6 |
echo "<br/>"; |
7 |
}
|
8 |
|
9 |
$employee = array('name' => 'John Smith', 'age' => 30, 'profession' => 'Software Engineer'); |
10 |
foreach ($employee as $key => $value) |
11 |
{
|
12 |
echo sprintf("%s: %s</br>", $key, $value); |
13 |
echo "<br/>"; |
14 |
}
|
15 |
?>
|
Si desea acceder a valores de matriz, puede usar la primera versión del bucle foreach como se muestra en el ejemplo anterior. Por
otro lado, si desea acceder tanto a una clave como a un valor, puede
hacerlo como se muestra en el ejemplo de $ employee anterior.
Conclusión
En este artículo, discutimos diferentes estructuras de control y bucles en PHP. Son una parte esencial de PHP, o cualquier lenguaje de programación para esa materia.
Espero que hayas disfrutado de este artículo, y si tienes alguna pregunta, ¡no dudes en preguntarles usando la siguiente información!



