Dnes se podíváme na cykly, neboli smyčky. Příkazy cyklů jsou v každém programovacím jazyce a jsou velmi důležité, dalo by se říci, že jsou asi nejdůležitější. Cyklus je něco, co se opakuje, v reálném světě například dny, týdny, měsíce. Cykly si budeme ukazovat dva, ten první který se opakuje do té doby, dokud se nedostane na určitou podmínku (ano může jít i do nekonečna, bohužel v takové chvíli se program „zasekne“), jedná se o cyklus WHILE a nebo cyklus, který lze trochu lépe řídit a nastavit mu třeba počet opakování, tedy cyklus FOR.
Cyklus FOR
Ve webových stránkách se velmi často setkáváme s cykly a ani o tom nevíme, typický představitelem cyklu jsou tabulky. Možná také patříte k té generaci, která ve třetí třídě dostala tabulku s malou násobilkou (viz. obrázek), čísla co jsme chtěli násobit jsme našli nejprve vpravo a poté nahoře, a poté sjeli prsty do míst kde se protínaly a měli výsledek. Vedle obrázku najdete, jak něco takového vytvořit pomocí cyklu. Možná si právě teď řeknete, že je to neuvěřitelně složité, ale nebojte, hned Vám to vysvětlím 😉
<?php$b = 11;
echo „<table border=\“1\“>“; for($a=1;$a<$b;$a++){ echo „<tr>“; for($c=1;$c<$b;$c++){ echo „<td>“ . $c * $a . „</td>“; } echo „</tr>“; } echo „</table>“; ?> |
Nyní si kód trochu rozebereme, jedná se o cyklus FOR, tedy každý FOR má předem nastaven počet opakování se a zapisuje se:
for($promenná = číslo_kde_bude_začínat ; $promenná < $maximální_hodnota ; $o_kolik_se_promenná_má_zvyšít) { OBSAH CYKLU }
První proměnná je tedy číslo, na kterém to vše začíná, v druhém místě je že pokud je proměnná menší než druhá proměnná, cyklus se bude vykonávat tak dlouho, dokud nebude rovná a nebo vyšší a ve třetím místě je, o kolik se má první proměnná zvýšit.
To, co je obsaženo v cyklu se bude pořád a dokola opakovat, dokud cyklus neskončí, tedy pokud to cyklu dáte vypsat text „AHOJ“ a cyklus se bude opakovat 10x, budete mít na stránce vypsáno 10x za sebou AHOJ.
For je tedy cyklus s parametrem, na rozdíl od cyklu WHILE, který je s podmínkou je u něj jasné, kolikrát se bude opakovat.
Cyklus WHILE
Jak jsem již zmínil, cyklus WHILE je s podmínkou a není u něj jasné, kdy skončí, má tedy trochu jiné využití než předchozí cyklus, například načítání obsahu databáze, kdy třeba nevíme, kolik dat potřebujeme načíst a tak načítáme vše, dokud tam něco je, další kde se dá WHILE použít je načítání obsahu souboru, kdy nevíme, kolik obsahuje řádku a tak načítáme do té doby, dokud se nedostaneme na EOF (End Of File).
Nicméně načítat soubory ani obsah databáze zatím neumíme a tak předchozí příklad ve kterém jsme si vytvořili tabulku pro třeťáky přepíšeme do cyklu WHILE a to takto:
<?php
$b = 10;
echo „<table border=\“1\“>“;
$a = 0;
while($a<$b){
$a++;
echo„<tr>“;
$c = 0;
while($c<$b){
$c++;
echo„<td>“ . $c * $a . „</td>“;
}
echo„</tr>“;
}
echo„</table>“;
?>
Příklad možná vypadá složitě, popravdě, nezvolil jsem úplně nejjednodušší příklad, nicméně takto by to dopadlo, pokud bychom chtěli to samé v cyklu WHILE, co je důležité a na co nesmíme zapomenou na rozdíl od cyklu FOR je to, že než znovu začne vnitřní cyklus, je potřeba jeho proměnnou vrátit zpět na 0, protože jinak se Vám nevykoná.
K cyklu WHILE se vrátíme ještě až budeme probírat databáze.
Cyklus DO
Krom cyklu WHILE a FOR existuje ještě cyklus DO, ten je asi nejsložitější a sám sem jej nikdy nepoužil. Cyklus do testuje podmínku až na konci cyklu, na rozdíl od těch druhých, které otestují podmínku a pokud sedí cyklus teprve provedou, cyklus DO nejprve cyklus provede a pak až teprve jej testuje, zápis by tedy mohl být něco jako:
<?php
$i = 0;
do {
echo„číslo „. $i . „\n“;
$i++;
} while ($i < 3);
?>
BREAK a CONTINUE
Čas od času se nám stane, že nepotřebujeme, aby cyklus probíhal celý, pokud znovu vezmeme naší tabulku a řekneme si, že nechceme, aby se v ní vypsali čísla vyšší než 50, použijeme pro to break:
<?php$b = 11;
echo „<table border=\“1\“>“; for($a=1;$a<$b;$a++){ echo „<tr>“; for($c=1;$c<$b;$c++){ if($c * $a>49) break; echo „<td>“ . $c * $a . „</td>“; } echo „</tr>“; } echo „</table>“; ?> |
Jak se z příkladu můžete všimnout, je tam dána podmínka, ve které, pokud by došlo, že dojde k vypsání čísla vyššího než 49, tak to break zastaví a číslo se nevypíše. Break ukončuje jen smyčku, ve které je, tedy pouze tu vnitřní, né vnější, protože ta pokračuje dále.
Příkaz continue neukončí vypisování smyčky, jen přeskočí zbytek těla a začne provádět další průchod smyčkou.