Zanka while je ena od osnovnih zank v PHP. Uporabimo jo takrat, ko želimo določen del kode izvajati toliko časa, dokler je nek pogoj resničen.
Primerna je predvsem v primerih, ko število ponovitev ni natančno določeno vnaprej, ampak je odvisno od pogoja, ki se preverja pred vsako ponovitvijo.
Pomni: Zanka while se izvaja toliko časa, dokler je pogoj resničen.
Osnovna pravila
Osnovna oblika zanke while je:
while (pogoj) {
// koda, ki naj se ponavlja
}
- pogoj se preveri pred vsako ponovitvijo,
- če je pogoj resničen, se telo zanke izvede,
- če je pogoj neresničen, se zanka konča,
- če je pogoj že na začetku neresničen, se telo zanke ne izvede niti enkrat.
V telesu zanke je običajno treba spreminjati spremenljivko ali stanje, ki vpliva na pogoj. Če tega ne naredimo, lahko nastane neskončna zanka.
Pozor: Če se vrednost, od katere je odvisen pogoj, v zanki ne spremeni, se zanka lahko izvaja neomejeno dolgo.
Primer izpisa števil
<?php
$i = 1;
while ($i <= 10) {
echo $i . " ";
$i++;
}
?>
V tem primeru se spremenljivka $i začne z vrednostjo 1. Zanka se izvaja, dokler velja pogoj $i <= 10. Po vsaki ponovitvi se vrednost spremenljivke poveča za 1.
Pomni: Pri zanki while moramo posebej paziti, da se pogoj sčasoma spremeni iz resničnega v neresničnega.
Primer izpisa tabele
Zanka while je uporabna tudi pri ustvarjanju ponavljajočih se delov HTML kode, na primer vrstic tabele.
<?php
$cena = 5;
$stevec = 10;
echo "<table>";
echo "<tr><th>Količina</th><th>Cena</th></tr>";
while ($stevec <= 100) {
echo "<tr><td>" . $stevec . "</td><td>" . ($cena * $stevec) . "</td></tr>";
$stevec += 10;
}
echo "</table>";
?>
| Količina | Cena |
|---|---|
| 10 | 50 |
| 20 | 100 |
| 30 | 150 |
| 40 | 200 |
| 50 | 250 |
| 60 | 300 |
| 70 | 350 |
| 80 | 400 |
| 90 | 450 |
| 100 | 500 |
Pomni: Zanko while lahko uporabljamo tudi za ustvarjanje ponavljajočih se delov izpisa, na primer vrstic tabele ali seznama.
Ukaza break in continue
V zanki while lahko uporabimo tudi ukaza break in continue. Ukaz break takoj prekine izvajanje zanke, ukaz continue pa preskoči preostanek trenutne ponovitve in nadaljuje z naslednjo.
<?php
$i = 0;
while ($i < 10) {
$i++;
if ($i === 5) {
continue;
}
if ($i === 8) {
break;
}
echo $i . " ";
}
?>
V tem primeru se število 5 ne izpiše, ker ga preskoči continue, zanka pa se konča pri 8, ker jo prekine break.
Pozor: Ukaz break zanko takoj konča, ukaz continue pa konča samo trenutno ponovitev.
Primerjava: while, do...while in for
| Zanka | Kdaj je najprimernejša | Posebnost |
|---|---|---|
while |
ko število ponovitev ni vnaprej natančno znano | pogoj se preveri na začetku |
do...while |
ko se mora telo zanke izvesti vsaj enkrat | pogoj se preveri na koncu |
for |
ko uporabljamo števec in poznamo potek ponavljanja | začetek, pogoj in korak so zapisani skupaj |
Pri zanki while se pogoj preveri na začetku. Pri zanki do...while pa se pogoj preveri na koncu, zato se telo zanke izvede vsaj enkrat. Zanka for pa je posebej primerna, kadar uporabljamo števec in želimo imeti celoten potek ponavljanja zapisan na enem mestu.
Pomni: Če ne vemo natančno, koliko ponovitev bo potrebnih, je zanka while pogosto najprimernejša izbira.
Priporočila
- Zanko
whileuporabljamo takrat, ko je ponavljanje odvisno od pogoja. - Pogoj naj bo zapisan jasno in pregledno.
- V telesu zanke moramo poskrbeti za spremembo vrednosti, ki vpliva na pogoj.
- Ukaza
breakincontinueuporabljamo premišljeno. - Za števske ponovitve je pogosto primernejša zanka
for.
Pozor: Nepregleden pogoj ali nepremišljena sprememba spremenljivk lahko hitro povzroči napake v delovanju zanke.
Pogoste napake
- Spremenljivka, ki vpliva na pogoj, se v zanki ne spremeni.
- Pogoj je zapisan napačno, zato se zanka izvede premalokrat ali prevečkrat.
- Pričakuje se, da se zanka izvede vsaj enkrat, čeprav je pogoj že na začetku neresničen.
- Ukaz
continuese napačno razume kot ukaz za končanje zanke. - Za primer, kjer bi bila preglednejša zanka
foraliforeach, se uporabi zankawhile.
Pozor: Najpogostejši težavi pri zanki while sta neskončna zanka in napačno zapisan pogoj.
Sklep
Zanka while je pomembna osnovna struktura za ponavljanje kode v PHP. Najprimernejša je takrat, ko je izvajanje odvisno od pogoja in število ponovitev ni natančno določeno vnaprej. Pri njeni uporabi je treba paziti na pravilen zapis pogoja, spremembo ustreznih spremenljivk in razumljivo logiko zanke.