Pętle while, do-while i for
🎯 Po tej lekcji powtórzysz czynność wiele razy bez kopiowania kodu.
Wyobraź sobie, że Ola musi wypisać 100 razy „Dzień dobry". Kopiowanie echo sto razy to koszmar. Pętle rozwiązują ten problem — pozwalają powtarzać fragment kodu tyle razy, ile potrzebujesz.
Pętla while — dopóki warunek jest prawdziwy
while sprawdza warunek przed każdą iteracją. Jeśli warunek jest od razu fałszywy, ciało pętli nie wykona się w ogóle.
<?php
declare(strict_types=1);
$licznik = 1;
while ($licznik <= 5) {
echo 'Krok ' . $licznik . "\n";
$licznik++;
}
// wynik:
// Krok 1
// Krok 2
// Krok 3
// Krok 4
// Krok 5
Jak to działa:
- PHP sprawdza: czy
$licznik <= 5? Tak (1 ≤ 5) → wykonaj ciało. - Wypisuje „Krok 1", zwiększa
$licznikdo 2. - Sprawdza ponownie: 2 ≤ 5? Tak → wypisuje „Krok 2"… i tak dalej.
- Gdy
$licznikosiągnie 6, warunek jest fałszywy → pętla kończy się.
Pętla do-while — przynajmniej raz
do-while działa jak while, ale warunek sprawdza się po pierwszej iteracji. Ciało pętli wykona się co najmniej raz.
<?php
declare(strict_types=1);
$haslo = '';
do {
// Symulacja: użytkownik wpisuje hasło
$haslo = 'tajne123';
echo 'Sprawdzam hasło...' . "\n";
} while ($haslo === '');
echo 'Hasło przyjęte!';
// wynik:
// Sprawdzam hasło...
// Hasło przyjęte!
W tym przykładzie nawet gdyby $haslo był pusty, kod wewnątrz do wykona się przynajmniej raz — bo warunek jest sprawdzany dopiero na końcu.
Prosty przykład odliczania:
<?php
declare(strict_types=1);
$sekundy = 3;
do {
echo $sekundy . '...' . "\n";
$sekundy--;
} while ($sekundy > 0);
echo 'Start!';
// wynik:
// 3...
// 2...
// 1...
// Start!
Pętla for — kiedy wiesz, ile razy
Gdy z góry wiesz, ile razy chcesz powtórzyć kod, for jest najczytelniejszym wyborem. Łączy inicjalizację, warunek i krok w jednej linii:
for (inicjalizacja; warunek; krok) {
// ciało pętli
}
<?php
declare(strict_types=1);
for ($i = 1; $i <= 10; $i++) {
echo $i . ' ';
}
// wynik: 1 2 3 4 5 6 7 8 9 10
Możesz liczyć w dół:
<?php
declare(strict_types=1);
for ($i = 5; $i >= 1; $i--) {
echo $i . '... ';
}
echo 'Koniec!';
// wynik: 5... 4... 3... 2... 1... Koniec!
Albo co dwa kroki:
<?php
declare(strict_types=1);
for ($i = 0; $i <= 20; $i += 5) {
echo $i . ' ';
}
// wynik: 0 5 10 15 20
— for: gdy z góry wiesz, ile razy (np. 10 razy, od 1 do n).
— while: gdy nie wiesz, ile razy — zależy od warunku (np. czytaj dane, dopóki są dostępne).
— do-while: gdy chcesz, żeby ciało wykonało się przynajmniej raz (np. walidacja danych wejściowych).
Praktyczny przykład — tabela mnożenia
<?php
declare(strict_types=1);
$liczba = 7;
for ($i = 1; $i <= 10; $i++) {
echo $liczba . ' × ' . $i . ' = ' . ($liczba * $i) . "\n";
}
// wynik:
// 7 × 1 = 7
// 7 × 2 = 14
// 7 × 3 = 21
// ...
// 7 × 10 = 70
W następnej lekcji poznasz foreach — pętlę stworzoną specjalnie do iterowania po tablicach.
Sprawdź się
Kiedy pętla while sprawdza warunek?
while sprawdza warunek PRZED każdą iteracją. Jeśli warunek jest fałszywy od razu, ciało pętli nie wykona się ani razu.
Czym różni się do-while od while?
W do-while warunek jest sprawdzany PO pierwszej iteracji, więc ciało pętli zawsze wykona się przynajmniej raz — nawet gdy warunek jest od razu fałszywy.
Jaki będzie wynik poniższej pętli? for ($i = 1; $i <= 3; $i++) { echo $i . ' '; }
$i zaczyna od 1, pętla trwa dopóki $i <= 3, więc wypisuje 1, 2, 3.
Ćwiczenie
Napisz skrypt, który używając pętli for, wypisuje liczby od 1 do 10, każdą w osobnej linii.
Pokaż rozwiązanie
<?php
declare(strict_types=1);
for ($i = 1; $i <= 10; $i++) {
echo $i . "\n";
}
// wynik:
// 1
// 2
// ...
// 10