PHP má samozřejmě také smyčku s parametrem. Dnes se podíváme, jak funguje.
21.6.2004 15:00 | Petr Zajíc | přečteno 97825×
V minulém díle našeho seriálu jsme se zaměřili na smyčky s podmínkou. Dnes uvidíme, jak funguje smyčka s parametrem. Narozdíl od smyčky s podmínku, kde není předem jisté kolikrát se daná smyčka bude opakovat, má smyčka s parametrem jinou filozofii. Většinou (ne však vždy) má takzvaný parametr smyčky, který určuje počet opakování celého cyklu. Pokud si ještě vzpomínáte na minulý díl, řešili jsme otázku jak vypsat tabulku čísel a jejich druhých mocnin. Smyčku s parametrem bychm použili následujícím způsobem:
<TABLE>
<TR><TD>Číslo</TD><TD>Druhá
mocnina</TD></TR>
<?
for ($i=1; $i<=10; $i++) echo "<TR><TD>".$i."</TD><TD>".$i*$i."</TD></TR>";
?>
</TABLE>
Krátké, že? Celý ten mechanismus funguje asi následovně: Před
započetím
vlastního "cyklování" se vyhodnotí první výraz v závorce za příkazem
for (v našem příkladu je to výraz $i=1). Pak se po řadě provedou
následující tři věci:
Pro uživatelé jazyka C je to normální chování, pokud jste předtím pracovali v jazycích typu asp, vbs a podobně bude vám pochopení této smyčky možná trochu trvat. Smyčky for mají i alternativní synaxi, takže bychom klidně mohli napsat:
<TABLE>
<TR><TD>Číslo</TD><TD>Druhá
mocnina</TD></TR>
<?
for ($i=1; $i<=10; $i++):
echo "<TR><TD>".$i."</TD>";
echo "<TD>".$i*$i."</TD></TR>";
endfor;
?>
</TABLE>
Což je totéž jako v předchozím případě. Volitelně můžeme libovolný parametr smyčky vynechat. Jestliže například vynecháme druhý ze tří parametrů příkazu for, získáme nekonečnou smyčku. To se moc nepoužívá ;-)). Rovněž můžeme v těle smyčky měnit parametr, tedy v našm příkladu $i. To se sice někdy používá, ale může to kód znepřehlednit.
Smyčky mohou být vnořené. Následující příklad vytvoří tabulku s malou násobilkou.
<TABLE>
<?
for ($radek=1; $radek<=10; $radek++):
echo "<TR>";
for ($sloupec=1; $sloupec<=10; $sloupec++):
echo "<TD>".$radek*$sloupec."</TD>";
endfor;
echo "</TR>";
endfor;
?>
</TABLE>
Kód je přímočarý. Proměnná $sloupec se změní 10x od jedné do deseti
a proměnná $radek jen jednou od jedné do deseti.
Smyčky, ať už s podmínkou nebo s parametrem nemusejí probíhat vždy řádně celým cyklem. Někdy může být výhodné provádění cyklu přerušit. K tomu slouží příkaz break, se kterým jsme se v tomto seriálu již setkali. Mluvili jsme o něm v souvislosti s příkazem switch, kde break ukončoval určitou větev v konstrukci case. Break ale může ukončovat i cykly do, while nebo for. Kdybychom předchozí příklad chtěli upravit tak, aby vracel pouze čísla do padesáti, můžeme provést něco jako:
<TABLE><?
for ($radek=1; $radek<=10; $radek++):
echo "<TR>";
for ($sloupec=1; $sloupec<=10; $sloupec++):
if ($radek * $sloupec>50) break; // to je ten
přidaný řádek
echo "<TD>".$radek*$sloupec."</TD>";
endfor;
echo "</TR>";
endfor;
?></TABLE>
Příkaz break ukončí vypisování výsledků vždy, když by hrozilo, že násobením dojdeme k číslu většímu než 50. Všimněte si, že příkaz break ukončí pouze vnitřní smyčku, ale vnější smyčka pokračuje dalším krokem. Kdybychom chtěli ukončit smyčky obě, použijeme příkaz break(2).
Příkaz continue naproti tomu nezpůsobí ukončení smyčky, jen přeskočí zbytek těla smyčky a začne provádět další iteraci (tedy další průchod smyčkou). Takže, kdybychom v našem násobilkovém příkladu chtěli vytisknout jen čísla větší než 50, mohlo by to vypadat třeba takto nějak:
<TABLE><?
for ($radek=1; $radek<=10; $radek++):
echo "<TR>";
for ($sloupec=1; $sloupec<=10; $sloupec++):
if ($radek * $sloupec<50) continue; // to je ten
přidaný řádek
echo "<TD>".$radek*$sloupec."</TD>";
endfor;
echo "</TR>";
endfor;
?></TABLE>
I příkaz continue má nepovinný parametr určující, kolik vnořených
cyklů for, do nebo while se má začít vykonávat od začátu. V praxi se s
tím ale moc nesetkáte.
V dalším díle se podíváme na funkce a přespříště se pokusíme z toho, co už umíme, sestavit nějaký opravdu použitelný skript.