Arbejde med flag i PHP
Nu skal vi lære at arbejde med flag.
Et flag er en speciel variabel, som
kun kan antage to værdier: true
og false. Med flag kan man løse
opgaver, der kontrollerer fravær af noget:
for eksempel kan man kontrollere, at der i et array
ikke er noget element med en bestemt værdi. Lad os
komme i gang.
Lad os løse følgende opgave: givet et array
med tal, skal du kontrollere, om der i det
er et element med værdien 3 eller ej. Hvis
der er - udskriv '+++', hvis ikke -
udskriv '---'.
Lad os først prøve at udskrive '+++'.
For at gøre dette gennemgår vi alle elementer i vores array
og med en if vil vi spørge - er det aktuelle
element lig med værdien 3. Hvis det er lig - udskriver vi
'+++':
<?php
$arr = [1, 2, 3, 4, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++';
}
}
?>
Men vores løsning er ikke særlig god: for hvis
der i arrayet ikke er én værdi 3,
men flere, så vil '+++' blive udskrevet flere
gange. Lad os rette vores array (lad os lave
to elementer med værdien 3) og overbevise os selv om dette:
<?php
$arr = [1, 2, 3, 4, 3, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++'; // vil udskrive flere gange
}
}
?>
Lad os rette problemet: vi afslutter loopet ved hjælp af
break, hvis elementet allerede er fundet:
<?php
$arr = [1, 2, 3, 4, 3, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++';
break; // afslutter loopet
}
}
?>
Lad os nu prøve at gøre det sådan, at
hvis der slet ikke er nogen elementer med værdien
3 i arrayet, udskrives '---'. En udbredt
misforståelse vil være at tilføje else til
vores if - i dette tilfælde vil '---'
blive udskrevet for alle elementer, der ikke er
3:
<?php
$arr = [1, 2, 3, 4, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++'; // udskrives på element 3
} else {
echo '---'; // udskrives på elementer 1, 2, 4, 5
}
}
?>
Så ideen om at tilføje else - er en dårlig
ide, den virker ikke. For at løse opgaver af denne
type (sådanne opgaver forekommer ret
hyppigt) bruger man såkaldte flag.
Som nævnt ovenfor, er et flag en sådan
variabel, som kun kan antage to værdier:
true eller false.
Så lad os lave en variabel flag
med følgende betydning: hvis den er lig true,
så er der et element 3 i arrayet, og hvis
false, så er der ikke sådan et element.
Indledningsvis sætter vi variablen flag
til værdien false - det vil sige, vi antager,
at der ikke er noget element 3 i arrayet:
$arr = [1, 2, 3, 4, 5];
$flag = false; // antager, at element 3 ikke er i arrayet
Derefter starter vi et loop med en if, som vi gjorde
det før. Hvis loopet opdager, at der i arrayet
er et element 3 - så sætter vi variablen flag
til værdien true og forlader loopet
med break:
<?php
$arr = [1, 2, 3, 4, 5];
$flag = false; // antager, at element 3 ikke er i arrayet
foreach ($arr as $elem) {
if ($elem === 3) {
$flag = true; // elementet findes - omdefinerer variablen $flag
break; // forlader loopet
}
}
?>
Svaret på spørgsmålet, om der er 3 i arrayet
eller ej, kan vi kun give efter loopet.
Og dette svar har vi allerede: efter loopet
kunne variablen flag være forblevet false
eller kunne have skiftet sin værdi til true,
hvis loopet opdagede 3 i arrayet:
<?php
$arr = [1, 2, 3, 4, 5];
$flag = false;
foreach ($arr as $elem) {
if ($elem === 3) {
$flag = true;
break;
}
}
// her er variablen $flag lig med enten true eller false
?>
Nu kan vi efter loopet lave en if, som
vil se på variablen flag og udskrive
på skærmen '+++' eller '---':
<?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 '---';
}
?>
Givet et array:
<?php
$arr = ['a', 'b', 'c', 'd', 'e'];
?>
Kontroller, om der i dette array er et element
'c'. Hvis der er - udskriv '+++',
og hvis ikke - udskriv '---'.
Skriv en kode, der vil kontrollere et tal for, om det er primtal eller ej. Et primtal er kun deleligt med ett og med sig selv, og er ikke deleligt med andre tal.