Werken met vlaggen in PHP
Nu gaan we leren werken met vlaggen.
Een vlag is een speciale variabele die
slechts twee waarden kan aannemen: true
en false. Met vlaggen kunnen
taken worden opgelost die de afwezigheid van iets controleren:
je kunt bijvoorbeeld controleren of er in een array
geen element met een bepaalde waarde zit. Laten we
beginnen.
Laten we de volgende taak oplossen: gegeven een array
met nummers, controleer of er een
element in zit met de waarde 3 of niet. Als
die er is - geef dan '+++' uit, als die er niet is -
geef dan '---' uit.
Laten we eerst proberen '+++' uit te voeren.
Om dit te doen, doorlopen we alle elementen van onze array
en met een if zullen we vragen - is het huidige
element gelijk aan de waarde 3. Als het gelijk is - voer dan
'+++' uit:
<?php
$arr = [1, 2, 3, 4, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++';
}
}
?>
Maar onze oplossing is niet erg goed: want als
er in de array niet één waarde 3 is,
maar meerdere, dan wordt '+++' meerdere
keren uitgevoerd. Laten we onze array aanpassen (we maken
twee elementen met de waarde 3) en daarvan overtuigen:
<?php
$arr = [1, 2, 3, 4, 3, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++'; // voert meerdere keren uit
}
}
?>
Laten we het probleem oplossen: we beëindigen de lus met
break, als het element al is gevonden:
<?php
$arr = [1, 2, 3, 4, 3, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++';
break; // beëindig de lus
}
}
?>
Laten we nu proberen te regelen dat,
als er helemaal geen elementen zijn met de waarde
3 in de array, er '---' wordt uitgevoerd. Een wijdverbreid
misverstand is om else toe te voegen aan
onze if - in dat geval wordt '---'
uitgevoerd voor alle elementen die niet
3 zijn:
<?php
$arr = [1, 2, 3, 4, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++'; // wordt uitgevoerd bij element 3
} else {
echo '---'; // wordt uitgevoerd bij elementen 1, 2, 4, 5
}
}
?>
Dus, het idee om else toe te voegen - is een slecht
idee, het werkt niet. Voor het oplossen van taken van dit
type (dergelijke taken komen vrij
vaak voor) gebruikt men zogenaamde vlaggen.
Zoals hierboven al vermeld, is een vlag - een
variabele die twee waarden kan aannemen:
true of false.
Dus, laten we een variabele flag maken
met deze betekenis: als deze gelijk is aan true,
dan zit er een element 3 in de array, en als
false, dan is er zo'n element niet.
Zet aanvankelijk de variabele flag
op de waarde false - dat wil zeggen, we nemen aan
dat het element 3 niet in de array zit:
$arr = [1, 2, 3, 4, 5];
$flag = false; // we nemen aan dat element 3 niet in de array zit
Vervolgens starten we een lus met een if, zoals we dat eerder
deden. Als de lus ontdekt dat er in de array
een element 3 is - dan zetten we de variabele flag
op de waarde true en verlaten we de lus
met break:
<?php
$arr = [1, 2, 3, 4, 5];
$flag = false; // we nemen aan dat element 3 niet in de array zit
foreach ($arr as $elem) {
if ($elem === 3) {
$flag = true; // element is er - herdefinieer de variabele $flag
break; // we verlaten de lus
}
}
?>
Het antwoord op de vraag, of er 3 in de array zit
of niet, kunnen we alleen na de lus geven.
En dit antwoord hebben we al: na de lus
kon de variabele flag false blijven
of kon zijn waarde veranderen naar true,
als de lus 3 in de array heeft ontdekt:
<?php
$arr = [1, 2, 3, 4, 5];
$flag = false;
foreach ($arr as $elem) {
if ($elem === 3) {
$flag = true;
break;
}
}
// hier is de variabele $flag gelijk aan ofwel true, ofwel false
?>
Nu kunnen we na de lus een if maken, die
naar de variabele flag kijkt en
'+++' of '---' op het scherm toont:
<?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 '---';
}
?>
Gegeven een array:
<?php
$arr = ['a', 'b', 'c', 'd', 'e'];
?>
Controleer of er in deze array een element
'c' zit.
Als die er is - toon dan '+++',
en als die er niet is - toon dan '---'.
Schrijf code die een getal controleert of het een priemgetal is of niet. Een priemgetal is alleen deelbaar door één en door zichzelf, en is niet deelbaar door andere getallen.