Pętle oraz Magiczny foreach w PHP
Pętle for, while, do-while oraz serce pracy z tablicami: foreach. Naucz się iterować po kluczach i wartościach oraz generować dynamiczne tabele HTML.
Pętle (For, While, Do-While, Foreach) w PHP
Przetwarzając dane z formularza lub zapytania z bazy danych MySQL, rzadko kiedy operujesz na pojedynczej wartości. Zazwyczaj otrzymujesz listę (tablicę) rekordów — np. listę 100 produktów w sklepie, użytkowników w bazie czy wyników meczów. Zamiast wypisywać każdy wiersz ręcznie z palca, powierzasz to zadanie pętlom.
1. Pętle tradycyjne: for, while oraz do ... while
Tradycyjne pętle działają niemal bliźniaczo jak w C++ i JavaScript:
Pętla for (Gdy z góry znasz liczbę powtórzeń)
<?php
// Licznik $i od 1 do 5 włącznie:
for ($i = 1; $i <= 5; $i++) {
echo "Licznik wynosi: " . $i . "<br>";
}
?>Pętla while (Dopóki warunek jest spełniony)
Warunek sprawdzany jest przed każdym wykonaniem ciała pętli. Jeśli od początku jest fałszywy — pętla nie wykona się ani razu.
<?php
$x = 0;
while ($x < 3) {
echo "Krok: " . $x . "<br>";
$x++; // Bardzo ważne: bez inkrementacji wpadniesz w nieskończoną pętlę!
}
?>Pętla do ... while (Gwarancja przynajmniej jednego wykonania)
Warunek sprawdzany jest po wykonaniu ciała pętli. Oznacza to, że blok kodu wykona się co najmniej jeden raz, nawet jeśli warunek jest od razu fałszywy.
<?php
$i = 10;
do {
echo "Wykona się przynajmniej ten jeden raz! Wartość: " . $i . "<br>";
$i++;
} while ($i < 5);
?>2. Gwiazda egzaminu INF.03: Pętla foreach
Na egzaminie zawodowym INF.03 to właśnie foreach jest Twoim najważniejszym narzędziem. Zwykła pętla for wymaga znajomości długości tablicy (count($tablica)), tworzenia licznika indeksów ($i = 0) i uważania na błędy wyjścia poza zakres (Array index out of bounds).
Pętla foreach robi to wszystko automatycznie pod maską. Działa w prosty, intuicyjny sposób: "Dla każdego elementu tablicy przypisz go do zmiennej pomocniczej i wykonaj blok kodu".
Wariant 1: Pobieranie tylko wartości (foreach ($tablica as $element))
<?php
$jezyki = ["PHP", "JavaScript", "Python", "SQL"];
echo "<ul>";
foreach ($jezyki as $jezyk) {
echo "<li>" . $jezyk . "</li>";
}
echo "</ul>";
?>Wariant 2: Pobieranie klucza i wartości (foreach ($tablica as $klucz => $wartosc))
Niezbędne przy tablicach asocjacyjnych (gdzie zamiast numerów indeksów 0, 1, 2 mamy nazwane etykiety tekstowe):
<?php
$parametryKomputera = [
"Procesor" => "AMD Ryzen 7",
"RAM" => "32 GB DDR5",
"Karta graficzna" => "RTX 4070",
"Dysk" => "1 TB NVMe SSD"
];
echo "<dl>";
foreach ($parametryKomputera as $komponent => $model) {
echo "<dt><strong>" . $komponent . ":</strong></dt>";
echo "<dd>" . $model . "</dd>";
}
echo "</dl>";
?>3. Kontrola biegu pętli: break i continue
Czasami w trakcie iteracji musisz przerwać pętlę wcześniej albo pominąć konkretny krok:
break— natychmiast przerywa działanie całej pętli i przechodzi do kodu za nią.continue— pomija resztę bieżącego przejścia i natychmiast przechodzi do sprawdzania kolejnego elementu.
<?php
$liczby = [2, 5, 8, -3, 10, -99, 15];
foreach ($liczby as $liczba) {
// Jeśli napotkamy kod awaryjny -99, przerywamy całą operację:
if ($liczba === -99) {
echo "Wykryto kod zatrzymania! Przerywam.<br>";
break;
}
// Pomijamy liczby ujemne:
if ($liczba < 0) {
continue;
}
echo "Przetwarzam dodatnią liczbę: " . $liczba . "<br>";
}
?>4. Praktyczny wzorzec CKE: Dynamiczna tabela HTML
Poniższy kod to esencja zadań egzaminacyjnych z generowania raportów i zestawień danych:
<?php
$produkty = [
["nazwa" => "Klawiatura mechaniczna", "cena" => 299, "stan" => 12],
["nazwa" => "Mysz bezprzewodowa", "cena" => 149, "stan" => 5],
["nazwa" => "Monitor 27 cali", "cena" => 899, "stan" => 0]
];
?>
<table border="1" cellpadding="8">
<thead>
<tr>
<th>Nazwa produktu</th>
<th>Cena brutto</th>
<th>Dostępność</th>
</tr>
</thead>
<tbody>
<?php foreach ($produkty as $p): ?>
<tr>
<td><?= $p['nazwa'] ?></td>
<td><?= $p['cena'] ?> zł</td>
<td>
<?php if ($p['stan'] > 0): ?>
<span style="color: green;">Dostępny (<?= $p['stan'] ?> szt.)</span>
<?php else: ?>
<span style="color: red;">Brak w magazynie</span>
<?php endif; ?>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>[!TIP] Zauważ alternatywną składnię PHP w szablonach HTML:
<?php foreach (...): ?> ... <?php endforeach; ?>oraz skrót wypisywania<?= $zmienna ?>(odpowiednik<?php echo $zmienna; ?>). Jest ona czytelniejsza i powszechnie stosowana w nowoczesnych projektach.
