Werk met vlae in PHP
Nou sal ons leer om met vlae te werk.
'n Vlag is 'n spesiale veranderlike wat
slegs twee waardes kan aanneem: true
en false. Met behulp van vlae kan jy
probleme oplos wat die afwesigheid van iets
toets: byvoorbeeld, jy kan toets of daar nie
'n element met 'n sekere waarde in 'n skikking
is nie. Kom ons begin.
Kom ons los die volgende probleem op: 'n skikking
met getalle word gegee, ons moet toets of daar
'n element met die waarde 3 in is of nie.
As daar is - druk ons '+++' uit, as daar
nie is nie - druk ons '---' uit.
Laat ons eers probeer om '+++' uit te druk.
Om dit te doen, sal ons deur al die elemente van
ons skikking iter en met 'n if sal ons vra - is
die huidige element gelyk aan die waarde 3.
As dit gelyk is - druk ons '+++' uit:
<?php
$arr = [1, 2, 3, 4, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++';
}
}
?>
Maar ons oplossing is nie baie goed nie: want as
daar nie een waarde 3 in die skikking is nie,
maar verskeie, sal '+++' verskeie kere
uitgedruk word. Kom ons reg ons skikking (maak
twee elemente met waarde 3) en oortuig onsself daarvan:
<?php
$arr = [1, 2, 3, 4, 3, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++'; // sal verskeie kere uitdruk
}
}
?>
Kom ons los die probleem op: beëindig die lus met behulp van
break, as die element reeds gevind is:
<?php
$arr = [1, 2, 3, 4, 3, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++';
break; // beëindig die lus
}
}
?>
Kom ons probeer nou om dit so te maak dat,
as daar glad geen elemente met die waarde
3 in die skikking is nie, '---'
uitgedruk word. 'n Algemene misverstand
sal wees om else by ons if te voeg -
in hierdie geval sal '---'
uitgedruk word vir alle elemente wat nie
3 is nie:
<?php
$arr = [1, 2, 3, 4, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++'; // sal op element 3 uitdruk
} else {
echo '---'; // sal op elemente 1, 2, 4, 5 uitdruk
}
}
?>
So, die idee om else by te voeg - is 'n slegte
idee, dit werk nie. Om probleme van hierdie tipe op te los
(sulke probleme kom redelik dikwels voor) gebruik mens
sogenaamde vlae.
Soos reeds hierbo genoem, is 'n vlag so 'n
veranderlike wat twee waardes kan aanneem:
true of false.
So, kom ons maak 'n veranderlike flag
met so 'n waarde: as dit gelyk is aan true,
dan is daar 'n element 3 in die skikking, en as
false, dan is daar nie so 'n element nie.
Aanvanklik stel ons die veranderlike flag
op die waarde false - dit wil sê ons sal aanneem
dat daar geen element 3 in die skikking is nie:
$arr = [1, 2, 3, 4, 5];
$flag = false; // aanvaar dat element 3 nie in die skikking is nie
Dan laat ons 'n lus loop met 'n if soos ons dit voorheen
gedoen het. As die lus vind dat daar 'n element 3 in die skikking
is - sal ons die veranderlike flag
op die waarde true stel en uit die lus
gaan met behulp van break:
<?php
$arr = [1, 2, 3, 4, 5];
$flag = false; // aanvaar dat element 3 nie in die skikking is nie
foreach ($arr as $elem) {
if ($elem === 3) {
$flag = true; // element is daar - herdefinieer veranderlike $flag
break; // gaan uit die lus
}
}
?>
Die antwoord op die vraag, of daar 3
in die skikking is of nie, kan ons slegs na die lus gee.
En hierdie antwoord het ons reeds: na die lus
kon die veranderlike flag false
bly of sy waarde na true verander het,
as die lus 3 in die skikking gevind het:
<?php
$arr = [1, 2, 3, 4, 5];
$flag = false;
foreach ($arr as $elem) {
if ($elem === 3) {
$flag = true;
break;
}
}
// hier is veranderlike $flag gelyk aan of true, of false
?>
Nou kan ons na die lus 'n if maak, wat
na die veranderlike flag sal kyk
en '+++' of '---' op die skerm sal uitdruk:
<?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 '---';
}
?>
Gegee 'n skikking:
<?php
$arr = ['a', 'b', 'c', 'd', 'e'];
?>
Toets of daar 'n element
'c' in hierdie skikking is.
As daar is - druk '+++' uit,
en as daar nie is nie - druk '---' uit.
Skryf kode wat 'n getal sal toets of dit priem is of nie. 'n Priemgetal is slegs deelbaar deur een en deur homself, en is nie deelbaar deur ander getalle nie.