Bucla foreach în PHP pe tablouri indexate
Când vrei să parcurgi fiecare element al unui tablou sau fiecare proprietate a unui obiect, foreach este alegerea firească. Nu ai nevoie de contor, pentru că PHP ține evidența poziției în locul tău.
La fiecare trecere, valoarea elementului curent este pusă în variabila pe care ai numit-o, aici $value. Bucla se termină după ce ultimul element a fost prelucrat.
Parcurgerea unui tablou indexat
Afișează fiecare element al tabloului indexat $colors:
Ieșire: script PHP
<?php
$colors = array("red", "green", "blue", "yellow");
foreach ($colors as $value) {
echo "$value <br>";
}
?>
Bucla foreach în PHP pe tablouri asociative
Elementele unui tablou asociativ au chei cu nume și de multe ori vei dori cheia împreună cu valoarea. Ca să le obții pe amândouă, scrie-le în antetul foreach sub forma $key => $value.
Parcurgerea unui tablou asociativ
Se afișează numele (cheia) și vârsta (valoarea) fiecărui membru din $members:
Ieșire: script PHP
<?php
$members = array("Peter"=>"35", "Ben"=>"37", "Joe"=>"43");
foreach ($members as $key => $value) {
echo "$key : $value <br>";
}
?>
Bucla foreach în PHP pe obiecte
Și obiectele funcționează cu foreach: bucla le parcurge proprietățile una câte una.
Parcurgerea proprietăților unui obiect
Aici, numele fiecărei proprietăți a obiectului $myCar este afișat lângă valoarea ei:
Ieșire: script PHP
<?php
class Car {
public $color;
public $model;
public function __construct($color, $model) {
$this->color = $color;
$this->model = $model;
}
}
$myCar = new Car("red", "Volvo");
foreach ($myCar as $x => $y) {
echo "$x: $y <br>";
}
?>
Instrucțiunea break în PHP
Nu trebuie să parcurgi tabloul până la capăt. Un break încheie bucla înainte să ajungă la ultimul element.
Oprirea buclei cu break
Bucla se încheie când $x conține "blue", așa că se afișează doar culorile dinaintea ei:
Ieșire: script PHP
<?php
$colors = array("red", "green", "blue", "yellow");
foreach ($colors as $x) {
if ($x == "blue") break;
echo "$x <br>";
}
?>
Instrucțiunea continue în PHP
Folosește continue ca să sari peste un element fără să închei bucla. Restul acelei iterații este abandonat și vine rândul elementului următor.
Sărirea unei iterații cu continue
Când $x conține "blue", echo este sărit, așa că se afișează celelalte trei culori:
Ieșire: script PHP
<?php
$colors = array("red", "green", "blue", "yellow");
foreach ($colors as $x) {
if ($x == "blue") continue;
echo "$x <br>";
}
?>
Bucla Foreach în PHP prin referință
În mod normal, variabila buclei conține o copie a fiecărui element, așa că dacă îi atribui o valoare nouă, tabloul original rămâne neschimbat.
Ca să modifici tabloul însuși, pune caracterul & în fața variabilei în declarația foreach. Variabila devine astfel o referință către elementul tabloului, iar orice îi atribui ajunge în tabloul original.
Foreach fără referință
Bucla îi dă lui $x valoarea „pink” când găsește „blue”, însă var_dump() arată că $colors nu s-a schimbat:
Ieșire: script PHP
<?php
$colors = array("red", "green", "blue", "yellow");
foreach ($colors as $x) {
if ($x == "blue") $x = "pink";
}
var_dump($colors);
?>
Foreach cu referință
Cu &$x, aceeași atribuire ajunge chiar în tablou, iar „blue” este înlocuit cu „pink”:
Ieșire: script PHP
<?php
$colors = array("red", "green", "blue", "yellow");
foreach ($colors as &$x) {
if ($x == "blue") $x = "pink";
}
var_dump($colors);
?>
Sintaxă alternativă
Există și un al doilea mod de a scrie o buclă foreach: înlocuiești acoladele cu două puncte și închei bucla cu endforeach.
Foreach cu endforeach
Din nou tabloul indexat $colors, afișat de data aceasta cu forma endforeach:
Ieșire: script PHP
<?php
$colors = array("red", "green", "blue", "yellow");
foreach ($colors as $x) :
echo "$x <br>";
endforeach;
?>