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:

  1. PHP sprawdza: czy $licznik <= 5? Tak (1 ≤ 5) → wykonaj ciało.
  2. Wypisuje „Krok 1", zwiększa $licznik do 2.
  3. Sprawdza ponownie: 2 ≤ 5? Tak → wypisuje „Krok 2"… i tak dalej.
  4. Gdy $licznik osiągnie 6, warunek jest fałszywy → pętla kończy się.
⚠️ Nieskończona pętla: Jeśli zapomnisz zwiększać licznik (lub inaczej zmieniać wartość warunku), pętla nigdy nie skończy i program się zawiesi. Zawsze upewnij się, że warunek kiedyś stanie się fałszywy.

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
💡 Kiedy co wybrać?
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?

Czym różni się do-while od while?

Jaki będzie wynik poniższej pętli? for ($i = 1; $i <= 3; $i++) { echo $i . ' '; }

Ć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