Delo z zastavicami v PHP
Zdaj se bomo naučili delati z zastavicami.
Zastavica je posebna spremenljivka, ki
lahko sprejme le dve vrednosti: true
in false. Z zastavicami lahko rešujemo
naloge, ki preverjajo odsotnost nečesa:
na primer, lahko preverimo, da v matriki
ni elementa z določeno vrednostjo. Pa začnimo.
Rešimo naslednjo nalogo: podana je matrika
s števili, preveriti je treba, ali vsebuje
element z vrednostjo 3 ali ne. Če
obstaja - izpišimo '+++', če ne -
izpišimo '---'.
Za začetek poskusimo izpisati '+++'.
Za to bomo prešli vse elemente naše matrike
in z if vprašali - ali je trenutni element
enak vrednosti 3. Če je enak - izpišimo
'+++':
<?php
$arr = [1, 2, 3, 4, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++';
}
}
?>
Toda naša rešitev ni zelo dobra: kajti če
bo v matriki ne ena vrednost 3,
ampak več, potem se bo '+++' izpisal večkrat.
Popravimo našo matriko (naredimo
dva elementa z vrednostjo 3) in se prepričajmo v tem:
<?php
$arr = [1, 2, 3, 4, 3, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++'; // izpisal bo večkrat
}
}
?>
Popravimo težavo: zaključimo zanko s pomočjo
break, če je element že najden:
<?php
$arr = [1, 2, 3, 4, 3, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++';
break; // zaključimo zanko
}
}
?>
Poskusimo zdaj narediti tako, da
če v matriki sploh ni elementov z vrednostjo
3, izpiše '---'. Pogosta
napačna predstava je dodati else k
našemu ifu - v tem primeru se bo '---'
izpisal za vse elemente, ki niso
3:
<?php
$arr = [1, 2, 3, 4, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++'; // izpiše se na elementu 3
} else {
echo '---'; // izpiše se na elementih 1, 2, 4, 5
}
}
?>
Torej, ideja dodati else - je slaba
ideja, ne deluje. Za reševanje tovrstnih nalog
(takšne naloge se pojavljajo dovolj
pogosto) uporabljajo tako imenovane zastavice.
Kot že omenjeno zgoraj, zastavica je takšna
spremenljivka, ki lahko sprejme dve vrednosti:
true ali false.
Torej, naredimo spremenljivko flag
s takšno vrednostjo: če je enaka true,
potem je v matriki element 3, če pa je
false, potem takšnega elementa ni.
Sprva postavimo spremenljivko flag
na vrednost false - to pomeni, da bomo šteli,
da elementa 3 v matriki ni:
$arr = [1, 2, 3, 4, 5];
$flag = false; // menimo, da elementa 3 ni v matriki
Nato zaženimo zanko z ifom tako, kot smo to delali
prej. Če zanka odkrije, da je v matriki
element 3 - potem postavimo spremenljivko flag
na vrednost true in izstopimo iz zanke
s pomočjo break:
<?php
$arr = [1, 2, 3, 4, 5];
$flag = false; // menimo, da elementa 3 ni v matriki
foreach ($arr as $elem) {
if ($elem === 3) {
$flag = true; // element obstaja - predefinirajmo spremenljivko $flag
break; // izstopimo iz zanke
}
}
?>
Odgovor na vprašanje, ali je v matriki 3
ali ne, lahko podamo šele po zanki.
In ta odgovor že imamo: po zanki
je spremenljivka flag lahko ostala false
ali pa je spremenila svojo vrednost na true,
če je zanka odkrila v matriki 3:
<?php
$arr = [1, 2, 3, 4, 5];
$flag = false;
foreach ($arr as $elem) {
if ($elem === 3) {
$flag = true;
break;
}
}
// tukaj je spremenljivka $flag enaka true ali false
?>
Zdaj lahko po zanki naredimo if, ki
bo pogledal spremenljivko flag in izpisal
na zaslon '+++' ali '---':
<?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 '---';
}
?>
Podana je matrika:
<?php
$arr = ['a', 'b', 'c', 'd', 'e'];
?>
Preverite, ali je v tej matriki element
'c'. Če obstaja - izpišite '+++',
če ne - izpišite '---'.
Napišite kodo, ki bo preverjala število, ali je praštevilo ali ne. Praštevilo je deljivo samo z ena in s samim seboj, in ni deljivo z drugimi števili.