Travailler avec des drapeaux en PHP
Maintenant, nous allons apprendre à travailler avec des drapeaux.
Un drapeau est une variable spéciale qui
ne peut prendre que deux valeurs : true
et false. À l'aide de drapeaux, il est possible de résoudre
des tâches vérifiant l'absence de quelque chose :
par exemple, on peut vérifier qu'un tableau
n'a pas d'élément avec une certaine valeur. Commençons.
Résolvons la tâche suivante : un tableau
de nombres est donné, il faut vérifier s'il contient
un élément avec la valeur 3 ou non. S'il
y en a - affichons '+++', s'il n'y en a pas -
affichons '---'.
Pour commencer, essayons d'afficher '+++'.
Pour cela, parcourons tous les éléments de notre tableau
et demandons avec un 'if' - l'élément courant
est-il égal à la valeur 3 ? S'il est égal - affichons
'+++' :
<?php
$arr = [1, 2, 3, 4, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++';
}
}
?>
Mais notre solution n'est pas très bonne : car si
dans le tableau il n'y a pas une seule valeur 3,
mais plusieurs, alors '+++' s'affichera plusieurs
fois. Modifions notre tableau (faisons
deux éléments avec la valeur 3) et assurons-nous-en :
<?php
$arr = [1, 2, 3, 4, 3, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++'; // affichera plusieurs fois
}
}
?>
Corrigeons le problème : terminons la boucle avec
break, si l'élément est déjà trouvé :
<?php
$arr = [1, 2, 3, 4, 3, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++';
break; // terminons la boucle
}
}
?>
Essayons maintenant de faire en sorte que,
s'il n'y a aucun élément avec la valeur
3 dans le tableau, '---' soit affiché. Une idée fausse
courante serait d'ajouter else à
notre 'if' - dans ce cas '---' sera
affiché pour tous les éléments qui ne sont pas
3 :
<?php
$arr = [1, 2, 3, 4, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++'; // affichera sur l'élément 3
} else {
echo '---'; // affichera sur les éléments 1, 2, 4, 5
}
}
?>
Ainsi, l'idée d'ajouter else est une mauvaise
idée, qui ne fonctionne pas. Pour résoudre des tâches de ce
type (ces tâches sont assez
courantes), on utilise ce qu'on appelle des drapeaux.
Comme mentionné ci-dessus, un drapeau est une
variable qui ne peut prendre que deux valeurs :
true ou false.
Alors, créons une variable flag
avec cette signification : si elle est égale à true,
alors le tableau contient un élément 3, et si
elle est false, alors il n'y a pas un tel élément.
Initialement, mettons la variable flag
à la valeur false - c'est-à-dire que nous considérerons
qu'il n'y a pas d'élément 3 dans le tableau :
$arr = [1, 2, 3, 4, 5];
$flag = false; // considérons qu'il n'y a pas d'élément 3 dans le tableau
Ensuite, lançons une boucle avec un 'if' comme nous le faisions
auparavant. Si la boucle détecte que le tableau
a un élément 3 - alors mettons la variable flag
à la valeur true et sortons de la boucle
avec break :
<?php
$arr = [1, 2, 3, 4, 5];
$flag = false; // considérons qu'il n'y a pas d'élément 3 dans le tableau
foreach ($arr as $elem) {
if ($elem === 3) {
$flag = true; // l'élément existe - redéfinissons la variable $flag
break; // sortons de la boucle
}
}
?>
La réponse à la question, savoir si le tableau contient 3
ou non, nous ne pouvons la donner qu'après la boucle.
Et cette réponse, nous l'avons déjà : après la boucle,
la variable flag pourrait être restée false
ou pourrait avoir changé sa valeur en true,
si la boucle a détecté 3 dans le tableau :
<?php
$arr = [1, 2, 3, 4, 5];
$flag = false;
foreach ($arr as $elem) {
if ($elem === 3) {
$flag = true;
break;
}
}
// ici la variable $flag est égale à true ou à false
?>
Maintenant, après la boucle, nous pouvons faire un 'if' qui
regardera la variable flag et affichera
à l'écran '+++' 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 '---';
}
?>
Un tableau est donné :
<?php
$arr = ['a', 'b', 'c', 'd', 'e'];
?>
Vérifiez que ce tableau contient l'élément
'c'. S'il y en a - affichez '+++',
et s'il n'y en a pas - affichez '---'.
Écrivez un code qui vérifiera si un nombre est premier ou non. Un nombre premier est divisible seulement par un et par lui-même, et n'est divisible par aucun autre nombre.