Rad sa zastavicama (flag-ovima) u PHP-u
Sada ćemo naučiti da radimo sa zastavicama (flag-ovima).
Zastavica (flag) je specijalna promenljiva koja
može imati samo dve vrednosti: true
i false. Pomoću zastavica mogu se rešavati
zadaci koji proveravaju odsustvo nečega:
na primer, može se proveriti da li u nizu
postoji element sa određenom vrednošću. Hajde da
započnemo.
Hajde da rešimo sledeći zadatak: dat je niz
sa brojevima, treba proveriti da li u njemu
postoji element sa vrednošću 3 ili ne. Ako
postoji - ispisaćemo '+++', ako ne -
ispisaćemo '---'.
Za početak, hajde da pokušamo da ispišemo '+++'.
Za to ćemo proći kroz sve elemente našeg niza
i if-om ćemo pitati - da li je trenutni
element jednak vrednosti 3. Ako jeste - ispisaćemo
'+++':
<?php
$arr = [1, 2, 3, 4, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++';
}
}
?>
Ali naše rešenje nije baš dobro: jer ako
u nizu bude ne jedna vrednost 3,
nego nekoliko, onda će se '+++' ispisati nekoliko
puta. Hajde da ispravimo naš niz (napravimo
dva elementa sa vrednošću 3) i uverimo se u to:
<?php
$arr = [1, 2, 3, 4, 3, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++'; // ispisaće se nekoliko puta
}
}
?>
Ispravimo problem: prekinimo petlju pomoću
break, ako je element već pronađen:
<?php
$arr = [1, 2, 3, 4, 3, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++';
break; // prekinimo petlju
}
}
?>
Hajde sada da pokušamo da uradimo tako da,
ako u nizu uopšte nema elemenata sa vrednošću
3, ispiše se '---'. Česta
greška je dodati else
našem if-u - u tom slučaju će se '---'
ispisivati za sve elemente koji nisu
3:
<?php
$arr = [1, 2, 3, 4, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++'; // ispisaće se na elementu 3
} else {
echo '---'; // ispisaće se na elementima 1, 2, 4, 5
}
}
?>
Dakle, ideja da se doda else - loša je
ideja, ne funkcioniše. Za rešavanje zadataka ovog
tipa (takvi zadaci se sreću dovoljno
često) koriste se takozvane zastavice (flag-ovi).
Kao što je već pomenuto, zastavica (flag) je takva
promenljiva, koja može imati dve vrednosti:
true ili false.
Dakle, hajde da napravimo promenljivu flag
sa ovakvim značenjem: ako je jednaka true,
onda u nizu postoji element 3, a ako je
false, onda takvog elementa nema.
Inicijalno ćemo postaviti promenljivu flag
na vrednost false - to jest smatraćemo,
da elementa 3 u nizu nema:
$arr = [1, 2, 3, 4, 5];
$flag = false; // smatramo da elementa 3 nema u nizu
Zatim ćemo pokrenuti petlju sa if-om onako kako smo to radili
ranije. Ako petlja otkrije da u nizu
postoji element 3 - onda ćemo postaviti promenljivu flag
na vrednost true i izaći iz petlje
pomoću break:
<?php
$arr = [1, 2, 3, 4, 5];
$flag = false; // smatramo da elementa 3 nema u nizu
foreach ($arr as $elem) {
if ($elem === 3) {
$flag = true; // element postoji - redefinišemo promenljivu $flag
break; // izlazimo iz petlje
}
}
?>
Odgovor na pitanje, da li u nizu postoji 3
ili ne, možemo dati tek nakon petlje.
I taj odgovor već imamo: nakon petlje
promenljiva flag je mogla ostati false
ili je mogla promeniti svoju vrednost na true,
ako je petlja otkrila u nizu 3:
<?php
$arr = [1, 2, 3, 4, 5];
$flag = false;
foreach ($arr as $elem) {
if ($elem === 3) {
$flag = true;
break;
}
}
// ovde je promenljiva $flag jednaka ili true, ili false
?>
Sada nakon petlje možemo napraviti if, koji će
pogledati promenljivu flag i ispisati
na ekran '+++' ili '---':
<?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 '---';
}
?>
Dat je niz:
<?php
$arr = ['a', 'b', 'c', 'd', 'e'];
?>
Proverite da li u ovom nizu postoji element
'c'. Ako postoji - ispišite '+++',
a ako ne - ispišite '---'.
Napišite kod koji će proveravati broj na to, da li je prost ili nije. Prost broj deli se samo sa jedinicom i sa samim sobom, i ne deli se drugim brojevima.