Trabajo con banderas en PHP
Ahora aprenderemos a trabajar con banderas.
Una bandera es una variable especial que
solo puede tomar dos valores: true
y false. Con la ayuda de banderas se pueden resolver
tareas que verifican la ausencia de algo:
por ejemplo, se puede verificar que en un array
no hay un elemento con un valor determinado. Vamos
a empezar.
Resolvamos la siguiente tarea: dado un array
con números, hay que comprobar si hay en él
un elemento con el valor 3 o no. Si
lo hay - imprimiremos '+++', si no -
imprimiremos '---'.
Para empezar, intentemos imprimir '+++'.
Para ello, recorreremos todos los elementos de nuestro array
y con un if preguntaremos - ¿es igual el elemento
actual al valor 3? Si es igual - imprimiremos
'+++':
<?php
$arr = [1, 2, 3, 4, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++';
}
}
?>
Pero nuestra solución no es muy buena: porque si
en el array hay no un valor 3,
sino varios, entonces '+++' se imprimirá varias
veces. Modifiquemos nuestro array (hagamos
dos elementos con el valor 3) y convenzámonos de ello:
<?php
$arr = [1, 2, 3, 4, 3, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++'; // imprimirá varias veces
}
}
?>
Arreglemos el problema: terminemos el ciclo con la ayuda de
break, si el elemento ya fue encontrado:
<?php
$arr = [1, 2, 3, 4, 3, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++';
break; // terminamos el ciclo
}
}
?>
Ahora intentemos hacer que,
si en el array no hay en absoluto elementos con el valor
3, se imprima '---'. Un error común
sería añadir else a
nuestro if - en este caso '---' se
imprimiría para todos los elementos que no sean
3:
<?php
$arr = [1, 2, 3, 4, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++'; // imprimirá en el elemento 3
} else {
echo '---'; // imprimirá en los elementos 1, 2, 4, 5
}
}
?>
Entonces, la idea de añadir else es mala
y no funciona. Para resolver tareas de este
tipo (estas tareas se encuentran con bastante
frecuencia) se utilizan las llamadas banderas.
Como se mencionó anteriormente, una bandera es una
variable que puede tomar dos valores:
true o false.
Entonces, hagamos una variable flag
con este significado: si es igual a true,
entonces en el array hay un elemento 3, y si
es false, entonces no hay tal elemento.
Inicialmente, pongamos la variable flag
en el valor false - es decir, supondremos
que el elemento 3 no está en el array:
$arr = [1, 2, 3, 4, 5];
$flag = false; // consideramos que el elemento 3 no está en el array
Luego, iniciaremos un ciclo con un if tal como lo hicimos
antes. Si el ciclo detecta que en el array
hay un elemento 3, entonces pondrá la variable flag
en el valor true y saldrá del ciclo
con break:
<?php
$arr = [1, 2, 3, 4, 5];
$flag = false; // consideramos que el elemento 3 no está en el array
foreach ($arr as $elem) {
if ($elem === 3) {
$flag = true; // el elemento existe - redefinimos la variable $flag
break; // salimos del ciclo
}
}
?>
La respuesta a la pregunta de si hay 3 en el array
o no, solo podemos darla después del ciclo.
Y esta respuesta ya la tenemos: después del ciclo
la variable flag pudo permanecer en false
o pudo cambiar su valor a true,
si el ciclo detectó un 3 en el array:
<?php
$arr = [1, 2, 3, 4, 5];
$flag = false;
foreach ($arr as $elem) {
if ($elem === 3) {
$flag = true;
break;
}
}
// aquí la variable $flag es igual a true o false
?>
Ahora, después del ciclo, podemos hacer un if que
mire la variable flag e imprima
en pantalla '+++' o '---':
<?php
$arr = [1, 2, 3, 4, 5];
$flag = false;
foreach ($arr as $elem) {
if ($elem === 3) {
$flag = true;
break;
}
}
if ($flag === true) {
echo '+++';
} else {
echo '---';
}
?>
Dado un array:
<?php
$arr = ['a', 'b', 'c', 'd', 'e'];
?>
Compruebe que en este array hay un elemento
'c'. Si lo hay - imprima '+++',
y si no - imprima '---'.
Escriba un código que compruebe si un número es primo o no. Un número primo es divisible solo por uno y por sí mismo, y no es divisible por otros números.