Arbeid med flagg i PHP
Nå skal vi lære å arbeide med flagg.
Et flagg er en spesiell variabel som
bare kan ha to verdier: true
og false. Med flagg kan man løse
oppgaver som sjekker fravær av noe:
for eksempel kan man sjekke om det i en array
ikke finnes noe element med en bestemt verdi. La oss
komme i gang.
La oss løse følgende oppgave: gitt en array
med tall, sjekk om den inneholder
et element med verdien 3 eller ikke. Hvis
den gjør det - skriv ut '+++', hvis ikke -
skriv ut '---'.
La oss først prøve å skrive ut '+++'.
For å gjøre dette, la oss gå gjennom alle elementene i arrayen vår
og med en if spørre - er det nåværende
elementet lik verdien 3. Hvis det er likt - skriv ut
'+++':
<?php
$arr = [1, 2, 3, 4, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++';
}
}
?>
Men løsningen vår er ikke veldig bra: for hvis
det i arrayen ikke er én verdi 3,
men flere, så vil '+++' skrives ut flere
ganger. La oss endre arrayen vår (la oss lage
to elementer med verdien 3) og overbevise oss om dette:
<?php
$arr = [1, 2, 3, 4, 3, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++'; // vil skrive ut flere ganger
}
}
?>
La oss rette opp problemet: avslutt løkken med
break, hvis elementet allerede er funnet:
<?php
$arr = [1, 2, 3, 4, 3, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++';
break; // avslutter løkken
}
}
?>
La oss nå prøve å gjøre det slik at,
hvis det i arrayen overhodet ikke er noen elementer med verdien
3, skal det skrives ut '---'. En vanlig
misforståelse vil være å legge til else til
vår if - i så fall vil '---'
skrives ut for alle elementer som ikke er
3:
<?php
$arr = [1, 2, 3, 4, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++'; // skrives ut for element 3
} else {
echo '---'; // skrives ut for elementene 1, 2, 4, 5
}
}
?>
Så, ideen om å legge til else - er en dårlig
ide, den fungerer ikke. For å løse oppgaver av denne
typen (slike oppgaver forekommer ganske
ofte) bruker man såkalte flagg.
Som nevnt ovenfor, er et flagg en
variabel som kan ha to verdier:
true eller false.
Så, la oss lage en variabel flag
med følgende betydning: hvis den er lik true,
da finnes det et element 3 i arrayen, og hvis
false, da finnes det ikke et slikt element.
Innledningsvis setter vi variabelen flag
til verdien false - det vil si at vi antar
at elementet 3 ikke er i arrayen:
$arr = [1, 2, 3, 4, 5];
$flag = false; // antar at elementet 3 ikke er i arrayen
Deretter starter vi en løkke med en if slik som vi gjorde
det tidligere. Hvis løkken oppdager at det i arrayen
finnes et element 3 - da setter vi variabelen flag
til verdien true og avslutter løkken
med break:
<?php
$arr = [1, 2, 3, 4, 5];
$flag = false; // antar at elementet 3 ikke er i arrayen
foreach ($arr as $elem) {
if ($elem === 3) {
$flag = true; // elementet finnes - omdefinerer variabelen $flag
break; // avslutter løkken
}
}
?>
Svaret på spørsmålet, om det i arrayen finnes 3
eller ikke, kan vi bare gi etter løkken.
Og dette svaret har vi allerede: etter løkken
kunne variabelen flag forbli false
eller kunne ha endret sin verdi til true,
hvis løkken oppdaget 3 i arrayen:
<?php
$arr = [1, 2, 3, 4, 5];
$flag = false;
foreach ($arr as $elem) {
if ($elem === 3) {
$flag = true;
break;
}
}
// her er variabelen $flag lik enten true eller false
?>
Nå kan vi etter løkken lage en if, som
vil se på variabelen flag og skrive ut
på skjermen '+++' 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 '---';
}
?>
Gitt en array:
<?php
$arr = ['a', 'b', 'c', 'd', 'e'];
?>
Sjekk om det i denne arrayen finnes et element
'c'. Hvis det finnes - skriv ut '+++',
og hvis ikke - skriv ut '---'.
Skriv kode som vil sjekke et tall for om det er primtall eller ikke. Et primtall er bare delbart på én og på seg selv, og er ikke delbart på andre tall.