Trabalhando com flags em PHP
Agora vamos aprender a trabalhar com flags.
Uma flag é uma variável especial que
só pode assumir dois valores: true
e false. Com as flags, podemos resolver
problemas que verificam a ausência de algo:
por exemplo, podemos verificar se não há
um elemento com um valor específico em um array. Vamos
começar.
Vamos resolver o seguinte problema: dado um array
com números, verifique se há nele
um elemento com o valor 3 ou não. Se
houver - exiba '+++', se não -
exiba '---'.
Para começar, vamos tentar exibir '+++'.
Para isso, vamos percorrer todos os elementos do nosso array
e com um 'if' vamos perguntar - o elemento atual
é igual ao valor 3? Se for igual - exibimos
'+++':
<?php
$arr = [1, 2, 3, 4, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++';
}
}
?>
Mas nossa solução não é muito boa: pois se
no array houver não um valor 3,
mas vários, então '+++' será exibido várias
vezes. Vamos alterar nosso array (fazer
dois elementos com o valor 3) e verificar isso:
<?php
$arr = [1, 2, 3, 4, 3, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++'; // exibirá várias vezes
}
}
?>
Vamos corrigir o problema: encerraremos o ciclo com
break, se o elemento já for encontrado:
<?php
$arr = [1, 2, 3, 4, 3, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++';
break; // encerra o ciclo
}
}
?>
Agora vamos tentar fazer com que,
se não houver elementos com o valor
3 no array, seja exibido '---'. Um equívoco comum
seria adicionar else ao
nosso if - neste caso, '---' será
exibido para todos os elementos que não são
3:
<?php
$arr = [1, 2, 3, 4, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++'; // exibirá no elemento 3
} else {
echo '---'; // exibirá nos elementos 1, 2, 4, 5
}
}
?>
Então, a ideia de adicionar else - é uma
ideia ruim, que não funciona. Para resolver problemas desse
tipo (tais problemas são bastante
comuns) são usadas as chamadas flags.
Como mencionado acima, uma flag é uma
variável que pode assumir dois valores:
true ou false.
Então, vamos criar uma variável flag
com o seguinte significado: se for igual a true,
então há um elemento 3 no array, e se
for false, então não há tal elemento.
Inicialmente, vamos definir a variável flag
como false - ou seja, vamos assumir
que o elemento 3 não está no array:
$arr = [1, 2, 3, 4, 5];
$flag = false; // assumimos que o elemento 3 não está no array
Em seguida, iniciaremos um ciclo com um if da mesma forma
que fizemos anteriormente. Se o ciclo detectar que no array
há um elemento 3 - então definiremos a variável flag
como true e sairemos do ciclo
com break:
<?php
$arr = [1, 2, 3, 4, 5];
$flag = false; // assumimos que o elemento 3 não está no array
foreach ($arr as $elem) {
if ($elem === 3) {
$flag = true; // elemento existe - redefinimos a variável $flag
break; // saímos do ciclo
}
}
?>
A resposta para a questão, se há 3
no array ou não, só podemos dar após o ciclo.
E essa resposta nós já temos: após o ciclo,
a variável flag pode ter permanecido false
ou pode ter mudado seu valor para true,
se o ciclo detectou 3 no array:
<?php
$arr = [1, 2, 3, 4, 5];
$flag = false;
foreach ($arr as $elem) {
if ($elem === 3) {
$flag = true;
break;
}
}
// aqui a variável $flag é igual a true ou false
?>
Agora, após o ciclo, podemos fazer um if que
verificará a variável flag e exibirá
na tela '+++' ou '---':
<?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 o array:
<?php
$arr = ['a', 'b', 'c', 'd', 'e'];
?>
Verifique se há neste array um elemento
'c'. Se houver - exiba '+++',
e se não - exiba '---'.
Escreva um código que verifique se um número é primo ou não. Um número primo é divisível apenas por um e por ele mesmo, e não é divisível por outros números.