Instrukcja foreach służy w PHP do przechodzenia po elementach tablicy. Standardowo zmienna używana w pętli otrzymuje kopię wartości elementu tablicy. Oznacza to, że zmiana tej zmiennej nie zmienia zawartości tablicy.
Jeżeli przed zmienną zostanie użyty znak &, pętla działa na referencji do elementu tablicy. Wtedy modyfikacja zmiennej w pętli zmienia bezpośrednio element tablicy.
Przykład
$tab = [2, -5, 7];
foreach ($tab as &$liczba) {
$liczba = $liczba * (-1);
}
unset($liczba);
print_r($tab);
Wynik:
Array
(
[0] => -2
[1] => 5
[2] => -7
)
Każdy element tablicy został pomnożony przez -1, czyli otrzymał przeciwny znak.
Po co jest unset() po pętli?
Po użyciu foreach z referencją zmienna, np. $liczba, nadal wskazuje na ostatni element tablicy. Może to prowadzić do trudnych błędów przy dalszym użyciu tej zmiennej.
Dlatego po zakończeniu pętli często zapisuje się:
unset($liczba);
Instrukcja ta usuwa powiązanie referencyjne zmiennej z ostatnim elementem tablicy.
Najważniejsze do egzaminu
foreach ($tab as $liczba)przechodzi po kopiach wartości.foreach ($tab as &$liczba)pozwala zmieniać elementy tablicy.* (-1)zmienia znak liczby na przeciwny.unset($liczba)po pętli z referencją zabezpiecza przed przypadkową zmianą ostatniego elementu tablicy.