Lucrul cu flag-uri în PHP
Acum vom învăța să lucrăm cu flag-uri.
Un flag - este o variabilă specială, care
poate lua doar două valori: true
și false. Cu ajutorul flag-urilor se pot rezolva
sarcini care verifică absența a ceva:
de exemplu, se poate verifica că într-un array
nu există un element cu o anumită valoare. Să începem.
Să rezolvăm următoarea sarcină: este dat un array
cu numere, trebuie să verificăm dacă în el există
un element cu valoarea 3 sau nu. Dacă
există - vom afișa '+++', dacă nu -
vom afișa '---'.
Pentru început să încercăm să afișăm '+++'.
Pentru aceasta vom parcurge toate elementele array-ului nostru
și cu un if vom întreba - este egal elementul curent
cu valoarea 3. Dacă este egal - vom afișa
'+++':
<?php
$arr = [1, 2, 3, 4, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++';
}
}
?>
Dar soluția noastră nu este foarte bună: dacă
în array vor fi nu o singură valoare 3,
ci mai multe, atunci '+++' se va afișa de mai multe
ori. Să corectăm array-ul nostru (să facem
două elemente cu valoarea 3) și să ne convingem de acest lucru:
<?php
$arr = [1, 2, 3, 4, 3, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++'; // va afișa de mai multe ori
}
}
?>
Să corectăm problema: vom încheia ciclul cu ajutorul
break, dacă elementul a fost deja găsit:
<?php
$arr = [1, 2, 3, 4, 3, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++';
break; // încheiem ciclul
}
}
?>
Acum să încercăm să facem astfel încât,
dacă în array nu există deloc elemente cu valoarea
3, să se afișeze '---'. O părere greșită
comună va fi să adăugăm else la
if-ul nostru - în acest caz '---' se va
afișa pentru toate elementele care nu sunt
3:
<?php
$arr = [1, 2, 3, 4, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++'; // se va afișa pe elementul 3
} else {
echo '---'; // se va afișa pe elementele 1, 2, 4, 5
}
}
?>
Deci, ideea de a adăuga else - este o idee proastă,
nefuncțională. Pentru rezolvarea sarcinilor de acest
tip (astfel de sarcini se întâlnesc destul de
des) se folosesc așa-numitele flag-uri.
După cum am menționat mai sus, un flag - este o
variabilă, care poate lua două valori:
true sau false.
Deci, să facem o variabilă flag
cu următoarea semnificație: dacă este egală cu true,
atunci în array există elementul 3, iar dacă
false, atunci un astfel de element nu există.
Inițial vom seta variabila flag
la valoarea false - adică vom considera,
că elementul 3 nu se află în array:
$arr = [1, 2, 3, 4, 5];
$flag = false; // considerăm că elementul 3 nu se află în array
Apoi vom porni ciclul cu if așa cum am făcut
anterior. Dacă ciclul va detecta că în array
există elementul 3 - atunci vom seta variabila flag
la valoarea true și vom ieși din ciclu
cu ajutorul break:
<?php
$arr = [1, 2, 3, 4, 5];
$flag = false; // considerăm că elementul 3 nu este în array
foreach ($arr as $elem) {
if ($elem === 3) {
$flag = true; // elementul există - redefinim variabila $flag
break; // ieșim din ciclu
}
}
?>
Răspunsul la întrebarea, dacă în array există 3
sau nu, îl putem da doar după ciclu.
Și acest răspuns îl avem deja: după ciclu
variabila flag poate să fi rămas false
sau poate să-și fi schimbat valoarea în true,
dacă ciclul a detectat în array 3:
<?php
$arr = [1, 2, 3, 4, 5];
$flag = false;
foreach ($arr as $elem) {
if ($elem === 3) {
$flag = true;
break;
}
}
// aici variabila $flag este fie true, fie false
?>
Acum după ciclu putem face un if, care
va analiza variabila flag și va afișa
pe ecran '+++' sau '---':
<?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 '---';
}
?>
Este dat un array:
<?php
$arr = ['a', 'b', 'c', 'd', 'e'];
?>
Verificați dacă în acest array există elementul
'c'. Dacă există - afișați '+++',
iar dacă nu - afișați '---'.
Scrieți un cod care va verifica un număr dacă este prim sau nu. Un număr prim se împarte doar la unu și la el însuși, și nu se împarte la alte numere.