Lavorare con i flag in PHP
Ora impareremo a lavorare con i flag.
Un flag è una variabile speciale che
può assumere solo due valori: true
e false. Con l'aiuto dei flag è possibile risolvere
problemi che verificano l'assenza di qualcosa:
ad esempio, si può verificare che in un array
non ci sia un elemento con un valore specifico. Iniziamo.
Risolviamo il seguente problema: dato un array
con numeri, dobbiamo verificare se contiene
un elemento con valore 3 o meno. Se
presente - stampiamo '+++', se assente -
stampiamo '---'.
Per iniziare, proviamo a stampare '+++'.
Per fare questo, iteriamo attraverso tutti gli elementi del nostro array
e con un if chiederemo - l'elemento corrente
è uguale al valore 3? Se è uguale - stampiamo
'+++':
<?php
$arr = [1, 2, 3, 4, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++';
}
}
?>
Ma la nostra soluzione non è ottimale: infatti, se
nell'array non ci fosse un solo valore 3,
ma diversi, allora '+++' verrebbe stampato diverse
volte. Modifichiamo il nostro array (mettiamo
due elementi con valore 3) e verifichiamolo:
<?php
$arr = [1, 2, 3, 4, 3, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++'; // stamperà più volte
}
}
?>
Risolviamo il problema: interrompiamo il ciclo con
break, se l'elemento è già stato trovato:
<?php
$arr = [1, 2, 3, 4, 3, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++';
break; // interrompiamo il ciclo
}
}
?>
Ora proviamo a fare in modo che,
se nell'array non ci sono affatto elementi con valore
3, venga stampato '---'. Un errore comune
sarebbe aggiungere else al
nostro if - in questo caso '---' verrebbe
stampato per tutti gli elementi che non sono
3:
<?php
$arr = [1, 2, 3, 4, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++'; // stamperà per l'elemento 3
} else {
echo '---'; // stamperà per gli elementi 1, 2, 4, 5
}
}
?>
Quindi, l'idea di aggiungere else è una
cattiva idea, non funziona. Per risolvere problemi di questo
tipo (problemi che si incontrano abbastanza
spesso) si usano i cosiddetti flag.
Come accennato in precedenza, un flag è una
variabile che può assumere due valori:
true o false.
Quindi, creiamo una variabile flag
con questo significato: se è uguale a true,
allora nell'array c'è un elemento 3, mentre se
è false, allora tale elemento non esiste.
Inizialmente impostiamo la variabile flag
a false - cioè supponiamo
che l'elemento 3 non sia presente nell'array:
$arr = [1, 2, 3, 4, 5];
$flag = false; // supponiamo che l'elemento 3 non sia nell'array
Poi eseguiamo un ciclo con un if, come facevamo
in precedenza. Se il ciclo rileva che nell'array
c'è un elemento 3 - allora imposteremo la variabile flag
a true e usciremo dal ciclo
con break:
<?php
$arr = [1, 2, 3, 4, 5];
$flag = false; // supponiamo che l'elemento 3 non sia nell'array
foreach ($arr as $elem) {
if ($elem === 3) {
$flag = true; // l'elemento c'è - ridefiniamo la variabile $flag
break; // usciamo dal ciclo
}
}
?>
La risposta alla domanda se nell'array c'è 3
o meno, possiamo darla solo dopo il ciclo.
E questa risposta la abbiamo già: dopo il ciclo
la variabile flag potrebbe essere rimasta false
o potrebbe aver cambiato il suo valore in true,
se il ciclo ha rilevato 3 nell'array:
<?php
$arr = [1, 2, 3, 4, 5];
$flag = false;
foreach ($arr as $elem) {
if ($elem === 3) {
$flag = true;
break;
}
}
// qui la variabile $flag è uguale a true o false
?>
Ora, dopo il ciclo, possiamo fare un if, che
guarderà la variabile flag e stamperà
a video '+++' 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 '---';
}
?>
Dato l'array:
<?php
$arr = ['a', 'b', 'c', 'd', 'e'];
?>
Verifica che in questo array ci sia l'elemento
'c'. Se presente - stampa '+++',
se assente - stampa '---'.
Scrivi del codice che verifichi se un numero è primo o meno. Un numero primo è divisibile solo per uno e per se stesso, e non è divisibile per altri numeri.