Arbete med flaggor i PHP
Nu ska vi lära oss att arbeta med flaggor.
En flagga är en speciell variabel som
bara kan anta två värden: true
och false. Med hjälp av flaggor kan man lösa
uppgifter som kontrollerar frånvaron av något:
till exempel kan man kontrollera att det i en array
finns ett element med ett visst värde. Låt oss
komma igång.
Låt oss lösa följande uppgift: given en array
med nummer, kontrollera om det finns ett
element med värdet 3 eller inte. Om
det finns - skriv ut '+++', om inte -
skriv ut '---'.
Låt oss först försöka skriva ut '+++'.
För att göra detta, låt oss gå igenom alla element i vår array
och med en if-sats fråga - är det aktuella
elementet lika med värdet 3. Om det är lika - skriv ut
'+++':
<?php
$arr = [1, 2, 3, 4, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++';
}
}
?>
Men vår lösning är inte särskilt bra: för om
det i arrayen inte finns ett värde 3,
utan flera, så kommer '+++' att skrivas ut flera
gånger. Låt oss ändra vår array (gör
två element med värdet 3) och se till om detta:
<?php
$arr = [1, 2, 3, 4, 3, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++'; // kommer att skrivas ut flera gånger
}
}
?>
Låt oss åtgärda problemet: avsluta loopen med hjälp av
break, om elementet redan hittats:
<?php
$arr = [1, 2, 3, 4, 3, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++';
break; // avsluta loopen
}
}
?>
Låt oss nu försöka göra så att,
om det i arrayen inte finns några element med värdet
3 alls, så skrivs '---' ut. Ett vanligt
misstag är att lägga till else till
vår if-sats - i så fall kommer '---' att
skrivas ut för alla element som inte är
3:
<?php
$arr = [1, 2, 3, 4, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++'; // kommer att skrivas ut på elementet 3
} else {
echo '---'; // kommer att skrivas ut på elementen 1, 2, 4, 5
}
}
?>
Så, idén att lägga till else är en dålig
idé, det fungerar inte. För att lösa uppgifter av denna
typ (sådana uppgifter förekommer ganska
ofta) använder man sig av så kallade flaggor.
Som nämnts ovan är en flagga en sådan
variabel som kan anta två värden:
true eller false.
Så, låt oss skapa en variabel flag
med detta värde: om den är lika med true,
så finns elementet 3 i arrayen, och om
false, så finns det inget sådant element.
Inledningsvis sätter vi variabeln flag
till värdet false - det vill säga vi antar
att elementet 3 inte finns i arrayen:
$arr = [1, 2, 3, 4, 5];
$flag = false; // antar att elementet 3 inte finns i arrayen
Sedan startar vi en loop med en if-sats som vi gjorde
tidigare. Om loopen upptäcker att det i arrayen
finns ett element 3 - så sätter vi variabeln flag
till värdet true och avslutar loopen
med hjälp av break:
<?php
$arr = [1, 2, 3, 4, 5];
$flag = false; // antar att elementet 3 inte finns i arrayen
foreach ($arr as $elem) {
if ($elem === 3) {
$flag = true; // elementet finns - omdefiniera variabeln $flag
break; // avsluta loopen
}
}
?>
Svaret på frågan, om det finns 3 i arrayen
eller inte, kan vi bara ge efter loopen.
Och det här svaret har vi redan: efter loopen
kunde variabeln flag förbli false
eller kunde ändra sitt värde till true,
om loopen upptäckte 3 i arrayen:
<?php
$arr = [1, 2, 3, 4, 5];
$flag = false;
foreach ($arr as $elem) {
if ($elem === 3) {
$flag = true;
break;
}
}
// här är variabeln $flag antingen true eller false
?>
Nu kan vi efter loopen göra en if-sats som
tittar på variabeln flag och skriver ut
'+++' 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 '---';
}
?>
Given en array:
<?php
$arr = ['a', 'b', 'c', 'd', 'e'];
?>
Kontrollera att det i denna array finns ett element
'c'. Om det finns - skriv ut '+++',
och om inte - skriv ut '---'.
Skriv kod som kommer att kontrollera om ett nummer är primtal eller inte. Ett primtal är bara delbart med ett och med sig självt, och är inte delbart med andra nummer.