Jeśli kiedykolwiek pisałeś kod w PHP, to na pewno zetknąłeś się z pętlami. Nawet jeśli nie zdawałeś sobie z tego sprawy, iteracje to jedno z najczęściej używanych narzędzi w programowaniu. Dzięki nim możemy automatyzować powtarzające się czynności, przetwarzać dane i oszczędzać sobie mnóstwo klepania kodu.
W tym artykule pokażę Ci, czym są iteracje w PHP, jak działają pętle, oraz jak możesz ich używać w praktyce — od prostych przykładów, po nieco bardziej zaawansowane rozwiązania. Gotowy?
Co to jest iteracja w PHP?
Zacznijmy od podstaw. Iteracja to po prostu powtarzanie jakiejś czynności określoną liczbę razy lub dopóki spełniony jest określony warunek.
W kontekście PHP (i ogólnie programowania), iteracja oznacza powtarzanie fragmentu kodu w pętli.
PHP oferuje kilka sposobów na wykonywanie iteracji:
forwhiledo...whileforeach- oraz iteracje za pomocą iteratorów obiektowych
Każda z tych pętli ma swoje zastosowanie — jedne nadają się do pracy z liczbami, inne z tablicami czy obiektami.
Pętla for — król prostych iteracji
Pętla for to klasyka. Używamy jej, gdy wiemy dokładnie, ile razy chcemy coś powtórzyć.
Najczęściej stosowana do prostych zadań, np. wypisania liczb od 1 do 10, wygenerowania elementów HTML, czy przetworzenia danych w tablicy o znanej długości.
🔧 Przykład:
<?php
for ($i = 1; $i <= 10; $i++) {
echo "Liczba: $i<br>";
}
?>
Co tu się dzieje?
$i = 1– zaczynamy od wartości 1$i <= 10– pętla działa, dopóki$ijest mniejsze lub równe 10$i++– po każdej iteracji zwiększamy$io 1
Efekt?
Na ekranie pojawi się dziesięć linijek tekstu od „Liczba: 1” do „Liczba: 10”.
Pętla while — dopóki warunek jest prawdziwy
Pętla while działa trochę inaczej.
Tutaj nie mówisz z góry, ile razy ma się wykonać — po prostu podajesz warunek, a pętla kręci się, dopóki ten warunek jest spełniony.
Przykład:
<?php
$licznik = 1;
while ($licznik <= 5) {
echo "To jest iteracja numer $licznik<br>";
$licznik++;
}
?>
Tutaj również dostaniemy 5 linijek tekstu.
Różnica polega na tym, że możemy w każdej chwili zmienić warunek — np. przerwać pętlę wcześniej, jeśli zajdzie jakiś inny warunek w kodzie.
Pętla do...while — wykonaj przynajmniej raz
Ta pętla jest bardzo podobna do while, ale ma jedną kluczową różnicę:
zawsze wykona się co najmniej raz, niezależnie od tego, czy warunek jest spełniony.
Przykład:
<?php
$x = 10;
do {
echo "Wartość x to $x<br>";
$x++;
} while ($x < 5);
?>
Mimo że $x zaczyna się od 10 i warunek $x < 5 jest od razu fałszywy, kod wewnątrz pętli i tak wykona się jeden raz.
To przydatne, gdy np. chcesz coś sprawdzić lub pobrać dane co najmniej raz, zanim zdecydujesz, czy kontynuować.
Pętla foreach — idealna do pracy z tablicami i obiektami
Pętla foreach to prawdziwa perełka w PHP.
Została stworzona specjalnie do pracy z tablicami i obiektami — czyli tym, co w PHP używamy na co dzień.
Przykład z tablicą:
<?php
$owoce = ["jabłko", "banan", "gruszka", "pomarańcza"];
foreach ($owoce as $owoc) {
echo "Lubię $owoc<br>";
}
?>
Tutaj PHP automatycznie przechodzi po każdym elemencie tablicy i przypisuje go do zmiennej $owoc.
Nie musisz liczyć długości tablicy, ani martwić się o indeksy — czysta wygoda!
A co z kluczami?
Jeśli chcesz mieć dostęp również do kluczy tablicy (np. indeksów lub nazw), użyj drugiego parametru:
<?php
$osoby = [
"Jan" => 25,
"Anna" => 30,
"Piotr" => 28
];
foreach ($osoby as $imie => $wiek) {
echo "$imie ma $wiek lat<br>";
}
?>
Wynik:
Jan ma 25 lat Anna ma 30 lat Piotr ma 28 lat
Iteratory w PHP — iteracje na poziomie obiektowym
Jeśli pracujesz z obiektami, możesz też użyć iteratorów.
PHP posiada interfejs Iterator, który pozwala stworzyć własną klasę, po której można „iterować” jak po tablicy.
Przykład praktyczny:
Załóżmy, że mamy klasę KolekcjaUzytkownikow, która przechowuje dane o użytkownikach.
<?php
class KolekcjaUzytkownikow implements Iterator {
private $uzytkownicy = [];
private $pozycja = 0;
public function __construct($uzytkownicy) {
$this->uzytkownicy = $uzytkownicy;
}
public function current() {
return $this->uzytkownicy[$this->pozycja];
}
public function key() {
return $this->pozycja;
}
public function next() {
++$this->pozycja;
}
public function rewind() {
$this->pozycja = 0;
}
public function valid() {
return isset($this->uzytkownicy[$this->pozycja]);
}
}
$lista = new KolekcjaUzytkownikow(["Kasia", "Marek", "Tomek"]);
foreach ($lista as $uzytkownik) {
echo "Użytkownik: $uzytkownik<br>";
}
?>
Dzięki temu możesz przechodzić po swojej klasie tak samo, jak po zwykłej tablicy.
To potężne narzędzie, szczególnie przy pracy z dużymi zestawami danych lub własnymi strukturami.
Iteracje a tablice wielowymiarowe
Czasami masz do czynienia z tablicami w tablicach (np. dane z bazy).
Jak sobie z tym poradzić?
Możesz użyć zagnieżdżonych pętli!
Przykład:
<?php
$produkty = [
["nazwa" => "Laptop", "cena" => 3500],
["nazwa" => "Telefon", "cena" => 2500],
["nazwa" => "Tablet", "cena" => 1800]
];
foreach ($produkty as $produkt) {
echo "Produkt: " . $produkt["nazwa"] . " - Cena: " . $produkt["cena"] . " zł<br>";
}
?>
Proste i czytelne — każda iteracja przetwarza jeden produkt.
Iteracje w praktyce — prawdziwe zastosowania
Okej, teoria teorią, ale jak używać iteracji w prawdziwych projektach?
Oto kilka typowych przykładów:
Generowanie elementów HTML
Iteracje świetnie nadają się do generowania dynamicznego HTML:
<?php
$menu = ["Strona główna", "O nas", "Kontakt", "Blog"];
echo "<ul>";
foreach ($menu as $pozycja) {
echo "<li>$pozycja</li>";
}
echo "</ul>";
?>
Przetwarzanie danych z formularza
<?php
foreach ($_POST as $klucz => $wartosc) {
echo "Pole: $klucz = $wartosc<br>";
}
?>
Dzięki temu możesz łatwo przejść po wszystkich polach formularza bez ich ręcznego wypisywania.
Operacje na plikach
Możesz np. iterować po liniach w pliku:
<?php
$plik = fopen("dane.txt", "r");
while (!feof($plik)) {
echo fgets($plik) . "<br>";
}
fclose($plik);
?>
Najczęstsze błędy przy iteracjach w PHP
Okej, iteracje są proste — ale to nie znaczy, że nie można popełnić błędów.
Oto kilka typowych wpadek:
- Brak inkrementacji w pętli
whilelubfor
→ Może skończyć się nieskończoną pętlą, która zawiesi skrypt. - Modyfikowanie tablicy w trakcie iteracji
foreach
→ Zmiana tablicy podczas jej przetwarzania może dawać nieoczekiwane wyniki. - Brak warunku zatrzymania
→ Zawsze upewnij się, że warunek pętli kiedyś stanie się fałszywy. - Zbyt głębokie zagnieżdżenie pętli
→ Jeśli masz kilka pętli w sobie, warto pomyśleć o refaktoryzacji kodu lub zastosowaniu funkcji.
Kilka wskazówek, jak pisać lepsze iteracje
- Używaj
foreachzawsze, gdy pracujesz z tablicami – jest bezpieczniejsza i czytelniejsza. - Unikaj zbyt długich pętli w jednym miejscu — lepiej wydziel je do funkcji.
- Jeśli przetwarzasz ogromne dane, rozważ użycie iteratorów lub generators (
yield). - Testuj warunki zatrzymania — zwłaszcza przy
whileido...while.
Bonus: użycie generatorów (yield) – nowoczesna iteracja
Od PHP 5.5 mamy jeszcze jedno potężne narzędzie — generatory.
Pozwalają tworzyć iteracje bez konieczności przechowywania całych danych w pamięci.
Przykład:
<?php
function liczDo($limit) {
for ($i = 1; $i <= $limit; $i++) {
yield $i;
}
}
foreach (liczDo(5) as $liczba) {
echo "Liczba: $liczba<br>";
}
?>
Tutaj funkcja liczDo() zwraca dane po jednym elemencie na raz, zamiast tworzyć całą tablicę.
Świetne rozwiązanie przy dużych zbiorach danych!
Iteracje to serce programowania w PHP.
Bez nich trudno sobie wyobrazić przetwarzanie danych, tworzenie dynamicznych stron czy generowanie raportów.