Cicluri
Pentru a efectua acțiuni repetate în PHP, la fel ca în alte limbaje de programare, se folosesc cicluri. În PHP există următoarele tipuri de cicluri:
- for
- while
- do..while
- foreach (discutat în tema despre array-uri)
Ciclul for
Ciclul for are următoarea definiție formală:
for ([inițializarea contorului]; [condiție]; [schimbarea contorului]) {
// acțiuni
}
Să analizăm un ciclu for standard:
<?php
for ($i = 1; $i < 10; $i++) {
echo "Pătratul numărului $i este " . $i * $i . "<br/>";
}
?>
Prima parte a declarației ciclului - $i = 1 - creează și inițializează contorul - variabila $i. Înainte de executarea ciclului, valoarea sa va fi 1.
A doua parte - $i < 10; - este condiția la care se va executa ciclul. În acest caz, ciclul se va executa până când $i atinge valoarea 10.
A treia parte - $i++ - schimbarea contorului cu o unitate. Nu trebuie neapărat să creștem cu o unitate; putem scădea: $i-- sau, de exemplu, să creștem cu 3: $i += 3.
Blocul ciclului se va executa de 9 ori, până când valoarea lui $i devine 10. Fiecare iterație a ciclului se numește iterație. În acest caz, vor avea loc 9 iterații.
Rezultatul în browser va fi:
Pătratul numărului 1 este 1
Pătratul numărului 2 este 4
Pătratul numărului 3 este 9
Pătratul numărului 4 este 16
Pătratul numărului 5 este 25
Pătratul numărului 6 este 36
Pătratul numărului 7 este 49
Pătratul numărului 8 este 64
Pătratul numărului 9 este 81
Declarația ciclului for poate omite părțile individuale. De exemplu, putem omite inițializarea contorului (care poate fi definit în afara ciclului):
$i = 5;
for (; $i < 10; $i++) {
echo $i;
}
Putem omite schimbarea contorului și să-l schimbăm în interiorul ciclului:
$i = 0;
for (; $i < 10;) {
echo $i;
$i += 2;
}
În acest caz, în fiecare iterație a ciclului, variabila $i crește cu 2. Rezultatul va fi:
02468
De asemenea, putem defini și utiliza mai multe variabile în declarația ciclului:
for ($i = 1, $j = 1; $i + $j < 10; $i++, $j += 2) {
echo "$i + $j = " . $i + $j . "<br>";
}
În acest caz, în declarația ciclului se definesc două variabile: $i și $j. La fiecare iterație, variabila $i crește cu 1, iar $j crește cu 2. Ciclul continuă până când suma celor două variabile atinge 10:
1 + 1 = 2
2 + 3 = 5
3 + 5 = 8
Putem folosi și sintaxa alternativă, în care în loc de acoladă deschisă se folosește două puncte, iar în loc de acoladă închisă se folosește cuvântul cheie endfor:
for ($i = 1; $i < 10; $i++):
echo "Pătratul numărului $i este " . $i * $i . "<br/>";
endfor;
Ciclu while
Ciclul while verifică adevărul unei condiții și, dacă condiția este adevărată, se execută blocul de instrucțiuni al ciclului:
<?php
$counter = 1;
while($counter < 10) {
echo $counter * $counter . "<br />";
$counter++;
}
?>
Dacă în blocul while este doar o instrucțiune, acoladele pot fi omise:
<?php
$counter = 0;
while(++$counter < 10)
echo $counter * $counter . "<br />";
?>
Putem folosi și sintaxa alternativă, în care în loc de acoladă deschisă se folosește două puncte, iar în loc de acoladă închisă se folosește cuvântul cheie endwhile:
$counter = 1;
while($counter < 10):
echo $counter * $counter . "<br />";
$counter++;
endwhile;
Ciclu do..while
Ciclul do..while este similar cu ciclul while, dar blocul ciclului se execută mai întâi și apoi se verifică condiția. Chiar dacă condiția este falsă, blocul ciclului se va executa cel puțin o dată:
<?php
$counter = 1;
do {
echo $counter * $counter . "<br />";
$counter++;
} while($counter < 10)
?>
Operatorii continue și break
Uneori, este necesar să ieșim din ciclu înainte de terminarea acestuia. În acest caz, putem folosi operatorul break:
<?php
for ($i = 1; $i < 10; $i++) {
$result = $i * $i;
if($result > 80) {
break;
}
echo "Pătratul numărului $i este $result <br/>";
}
?>
Dacă rezultatul operației este mai mare de 80, se va ieși din ciclu.
Pentru a gestiona ciclurile, putem folosi și operatorul continue. Acesta trece la următoarea iterație a ciclului:
<?php
for ($i = 1; $i < 10; $i++) {
if($i == 5) {
continue;
}
echo "Pătratul numărului $i este " . $i * $i . "<br/>";
}
?>
Când valoarea lui $i devine 5, se trece la următoarea iterație, iar toate celelalte instrucțiuni după operatorul continue nu se vor executa.
Cicluri imbricate
Ciclurile pot fi plasate în interiorul altor cicluri. De exemplu, putem folosi un ciclu imbricat pentru a afișa un tabel de înmulțire:
<!DOCTYPE html>
<html>
<head>
<title>FDC.COM</title>
<meta charset="utf-8" />
</head>
<body>
<table>
<?php
for ($i = 1; $i < 10; $i++) {
echo "<tr>";
for ($j = 1; $j < 10; $j++) {
echo "<td>" . $i * $j . "</td>";
}
echo "</tr>";
}
?>
</table>
</body>
</html>
În acest caz, codul PHP este plasat în elementul <table>, adică se va crea un tabel.
În ciclul exterior se definește variabila contor $i. În acest ciclu exterior se afișează eticheta <tr>, adică eticheta rândului:
for ($i = 1; $i < 10; $i++) {
echo "<tr>";
Apoi, se pornește ciclul imbricat, se definește variabila contor $j. Ciclul crește secvențial valoarea variabilei $j cu o unitate și înmulțește valoarea acesteia cu valoarea variabilei $i. Rezultatul este afișat în elementul <td>:
for ($j = 1; $j < 10; $j++) {
echo "<td>" . $i * $j . "</td>";
După 9 iterații, când variabila $j atinge valoarea 10, ciclul imbricat se termină, iar ciclul exterior afișează eticheta de închidere a rândului:
echo "</tr>";
}
Și se pornește o nouă iterație a ciclului exterior.
În final, scriptul va forma un tabel de înmulțire.
