Lippude kasutamine PHP-s
Nüüd õpime töötama lippudega.
Lipp on spetsiaalne muutuja, mis
võib võtta ainult kaks väärtust: true
ja false. Lippude abil saab lahendada
ülesandeid, mis kontrollivad millegi puudumist:
näiteks saab kontrollida, kas massiivis
ei ole elementi kindla väärtusega. Hakkame pihta.
Lahendame järgmise ülesande: antud on massiiv
arvudega, tuleb kontrollida, kas selles on
element väärtusega 3 või mitte. Kui
on - väljastame '+++', kui ei -
väljastame '---'.
Alustuseks proovime väljastada '+++'.
Selleks loeme läbi kõik meie massiivi elemendid
ja if-iga küsime - kas praegune element
on võrdne väärtusega 3. Kui on - väljastame
'+++':
<?php
$arr = [1, 2, 3, 4, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++';
}
}
?>
Aga meie lahendus pole eriti hea: sest kui
massiivis poleks üks väärtus 3,
vaid mitu, siis '+++' väljastatakse mitu
korda. Parandame oma massiivi (teeme
kaks elementi väärtusega 3) ja veendume selles:
<?php
$arr = [1, 2, 3, 4, 3, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++'; // väljastab mitu korda
}
}
?>
Parandame probleemi: lõpetame tsükli abiga
break, kui element on juba leitud:
<?php
$arr = [1, 2, 3, 4, 3, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++';
break; // lõpetame tsükli
}
}
?>
Proovime nüüd teha nii, et
kui massiivis üldse pole elemente väärtusega
3, väljastataks '---'. Levinud
eksiarvamus on lisada else
meie if-ile - sel juhul '---'
väljastatakse kõikidele elementidele, mis ei ole
3:
<?php
$arr = [1, 2, 3, 4, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++'; // väljastab elemendil 3
} else {
echo '---'; // väljastab elementidel 1, 2, 4, 5
}
}
?>
Niisiis, idee lisada else - halb
idee, ei tööta. Sellist tüüpi ülesannete lahendamiseks
(sellised ülesanded esinevad piisavalt
sageli) kasutatakse nn lippe.
Nagu juba eespool mainitud, on lipp selline
muutuja, mis võib võtta kaks väärtust:
true või false.
Niisiis, teeme muutuja flag
sellise väärtusega: kui see on võrdne true,
siis massiivis on element 3, aga kui
false, siis sellist elementi pole.
Algselt paneme muutuja flag
väärtuseks false - see tähendab, et loeme,
et elementi 3 massiivis pole:
$arr = [1, 2, 3, 4, 5];
$flag = false; // loeme, et elementi 3 pole massiivis
Seejärel käivitame tsükli if-iga nii, nagu me tegime
seda varem. Kui tsükkel tuvastab, et massiivis
on element 3 - siis paneme muutuja flag
väärtuseks true ja väljume tsüklist
abil break:
<?php
$arr = [1, 2, 3, 4, 5];
$flag = false; // loeme, et elementi 3 pole massiivis
foreach ($arr as $elem) {
if ($elem === 3) {
$flag = true; // element on olemas - määrame muutuja $flag ümber
break; // väljume tsüklist
}
}
?>
Vastuse küsimusele, kas massiivis on 3
või mitte, saame anda alles pärast tsüklit.
Ja see vastus on meil juba olemas: pärast tsüklit
muutuja flag võib jääda false
või võis muuta oma väärtuse true-ks,
kui tsükkel tuvastas massiivis 3:
<?php
$arr = [1, 2, 3, 4, 5];
$flag = false;
foreach ($arr as $elem) {
if ($elem === 3) {
$flag = true;
break;
}
}
// siin on muutuja $flag võrdne kas true või false
?>
Nüüd saame pärast tsüklit teha if-i, mis
vaatab muutujat flag ja väljastab
ekraanile '+++' või '---':
<?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 '---';
}
?>
Antud on massiiv:
<?php
$arr = ['a', 'b', 'c', 'd', 'e'];
?>
Kontrollige, kas selles massiivis on element
'c'. Kui on - väljastage '+++',
aga kui ei - väljastage '---'.
Kirjutage kood, mis kontrollib arvu, kas see on algarv või mitte. Algarv jagub ainult ühega ja iseendaga, ning ei jagu teistele arvudele.