Vėliavų naudojimas PHP
Dabar mes išmoksime dirbti su vėliavomis.
Vėliava - tai specialus kintamasis, kuris
gali įgyti tik dvi reikšmes: true
ir false. Naudojant vėliavas galima spręsti
uždavinius, kurie tikrina ko nors nebuvimą:
pavyzdžiui, galima patikrinti, ar masyve
nėra elemento su tam tikra reikšme. Pradėkime.
Išspręskime tokį uždavinį: duotas masyvas
su skaičiais, reikia patikrinti, ar jame
yra elementas su reikšme 3, ar ne. Jei
yra - išveskime '+++', jei nėra -
išveskime '---'.
Pirmiausia pabandykime išvesti '+++'.
Norėdami tai padaryti, pereisime per visus mūsų masyvo elementus
ir su if sakiniu tikrinsime - ar dabartinis
elementas lygus reikšmei 3. Jei lygus - išveskime
'+++':
<?php
$arr = [1, 2, 3, 4, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++';
}
}
?>
Bet mūsų sprendimas nėra labai geras: jei
masyve bus ne viena reikšmė 3,
o kelios, tai '+++' bus išvesta kelis
kartus. Pakeiskime mūsų masyvą (padarykime
du elementus su reikšme 3) ir tuo įsitikinkime:
<?php
$arr = [1, 2, 3, 4, 3, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++'; // išves kelis kartus
}
}
?>
Ištaisykime problemą: užbaikime ciklą naudodami
break, jei elementas jau rastas:
<?php
$arr = [1, 2, 3, 4, 3, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++';
break; // užbaigiame ciklą
}
}
?>
Dabar pabandykime padaryti taip, kad,
jei masyve išvis nėra elementų su reikšme
3, būtų išvesta '---'. Dažnas
klaidingas sprendimas būtų pridėti else prie
mūsų if sakinio - tokiu atveju '---' bus
išvesta visiems elementams, kurie nėra
3:
<?php
$arr = [1, 2, 3, 4, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++'; // išves ant elemento 3
} else {
echo '---'; // išves ant elementų 1, 2, 4, 5
}
}
?>
Taigi, idėja pridėti else - bloga
idėja, neveikianti. Tokio tipo uždaviniams spręsti
(tokie uždaviniai pasitaiko pakankamai
dažnai) ir naudojamos vadinamosios vėliavos.
Kaip jau minėta anksčiau, vėliava - tai toks
kintamasis, kuris gali įgyti dvi reikšmes:
true arba false.
Taigi, padarykime kintamąjį flag
su tokia reikšme: jei jis lygus true,
tai masyve yra elementas 3, o jei
false, tokio elemento nėra.
Iš pradžių nustatykime kintamąjį flag
į reikšmę false - tai reiškia, kad laikysime,
kad elemento 3 masyve nėra:
$arr = [1, 2, 3, 4, 5];
$flag = false; // manome, kad elemento 3 nėra masyve
Tada paleiskime ciklą su if sakiniai taip, kaip mes darėme
anksčiau. Jei ciklas aptiks, kad masyve
yra elementas 3 - tai nustatysime kintamąjį flag
į reikšmę true ir išeisime iš ciklo
naudodami break:
<?php
$arr = [1, 2, 3, 4, 5];
$flag = false; // manome, kad elemento 3 nėra masyve
foreach ($arr as $elem) {
if ($elem === 3) {
$flag = true; // elementas yra - perapibrėžsime kintamąjį $flag
break; // išeisime iš ciklo
}
}
?>
Atsakymą į klausimą, ar masyve yra 3,
ar ne, galime duoti tik po ciklo.
Ir šį atsakymą mes jau turime: po ciklo
kintamasis flag galėjo likti false
arba galėjo pakeisti savo reikšmę į true,
jei ciklas aptiko masyve 3:
<?php
$arr = [1, 2, 3, 4, 5];
$flag = false;
foreach ($arr as $elem) {
if ($elem === 3) {
$flag = true;
break;
}
}
// čia kintamasis $flag lygus arba true, arba false
?>
Dabar po ciklo mes galime padaryti if sakinį, kuris
pažiūrės į kintamąjį flag ir išves
į ekraną '+++' arba '---':
<?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 '---';
}
?>
Duotas masyvas:
<?php
$arr = ['a', 'b', 'c', 'd', 'e'];
?>
Patikrinkite, ar šiame masyve yra elementas
'c'. Jei yra - išveskite '+++',
o jei nėra - išveskite '---'.
Parašykite kodą, kuris tikrins skaičių, ar jis yra pirminis, ar ne. Pirminis skaičius dalijasi tik iš vieneto ir iš savęs, ir nesidalija iš kitų skaičių.