Cykly jsou konstrukce, které umožňují vykonávat stejné nebo podobné příkazy vícekrát po sobě. Cykly se používají velmi často a nedá se bez nich skoro napsat žádný rozumný skript. Součástí cyklu je i podmínka, která vyhodnocuje, kdy má již provádění cyklu skončit. Někdy potřebujeme, aby se určité cykly opakovaly po určitý počet opakování, třeba desetkrát, Jindy můžeme chtít, aby se cyklus opakoval po určitý čas, další variantou může být např. požadavek, aby cyklus neustále vypisoval určená data z databáze, než se vypíšou všechny apod. Proto existují v PHP pro různé varianty cyklů různé konstrukce:
- cyklus while
- cyklus do while
- cyklus for
- konstrukce switch
- cyklus foreach (viz kapitola Pole v PHP)
Cyklus while Je to nejjednodušší varianta cyklu. Základní tvar je:
Princip:
- Otestuje se podmínka. Pokud není pravdivá, cyklus while končí a PHP pokračuje za cyklem while
- Pokud je podmínka pravdivá, vykoná se příkaz a cyklus se opakuje.
Jinak řečeno, smyslem cyklu while je neustále dokola opakovat příkaz, dokud platí podmínka. Příkaz se však nemusí provést ani jednou. To v případě, že hned na začátku po testování je podmínka nepravdivá. Příklad cyklu while:
Tento příklad vypisuje čísla od jedné do pěti. Příkaz break v cyklech Existuje možnost či potřeba přerušit provádění cyklu v určitém okamžiku. K tomuto účelu existuje příkaz break. Jakmile PHP narazí na tento příkaz, okamžitě cyklus předčasně ukončí:
Cyklus do while Je velmi podobný cyklu while. Jediný rozdíl je v umístění podmínky, která se testuje.
Princip je tedy jednoduchý:
- Vykoná se příkaz
- Otestuje se podmínka. Pokud je pravdivá, pokračuje cyklus znovu od začátku
Na rozdíl od cyklu while se cyklus do while vykoná vždy alespoň jednou. Příklad:
Cyklus for Cyklus for je nejsložitějším cyklem v PHP, přesto pro svou užitečnost patří k nejpoužívanějším cyklům vůbec. Používáme ho především tam, kde víme, kolikrát chceme cyklus opakovat. Jeho základní tvar vypadá následovně:
Jinak také:
Cyklus probíhá následovně:
- Nejdříve se vykoná počáteční příkaz
- Otestuje se podmínka. Pokud je pravdivá, pokračuje se následujícím bodem 3. pokud není pravdivá, cyklus skončí a PHP pokračuje za cyklem for
- Vykoná se „příkaz, který se bude cyklicky opakovat“ a hned poté se vykoná „příkaz, který se vykoná po každém cyklu“. Pokračuje se znovu bodem 2.
Kód cyklu for (i když je nejsložitější) má velmi jednoduchý kód. Příklad:
Popis:
- Nejdříve se vykoná počáteční příkaz (inicializace proměnné). Je to první příkaz v závorce. V tomto případě to je přiřazení proměnné $i na číslo 1.
- Pak se otestuje podmínka, v tomto případě se testuje, zda je proměnná $i menší nebo rovna číslu 5. Pokud je podmínka pravdivá, pokračuje se vykonáním příkazu, který se bude cyklicky opakovat (skript), v tomto případě tedy vypsáním proměnné $i.
- Dále se pokračuje příkazem, který se vykoná po každém cyklu (operace), v tomto případě je to inkrementace – zvětšení hodnoty o jednu.
- Následuje opakování cyklu, tedy otestuje se podmínka atd… Jakmile je testovaná podmínka nepravdivá, okamžitě cyklus končí a PHP pokračuje až za cyklem for.
- Jak již bylo zmíněno, tento cyklus se především využívá v případě, že víte, kolikrát se má daná operace provádět. Např. zákazník v e-shopu může stáhnout tři soubory zdarma. Další už budou placené… apod.
Konstrukce switch Konstrukce switch slouží k testování (porovnáváním) hodnoty proměnné se zadanými hodnotami. Příklad:
Vysvětlení: Textový řetězec (v tomto případě zkratka cz) je přiřazena do proměnné $zeme. Konstrukce switch začne porovnávat obsah proměnné $zeme s jednotlivými hodnotami uvedenými u větví case. V tomto případě je to postupně cz, sk a pl. Jakmile PHP narazí na shodnou hodnotu, vykoná příkaz v dané větvi case. V našem případě je to vždy vypsání daného textového řetězce. Protože v proměnné máme hodnotu ‘cz‘, ve výsledku se vypíše Česká republika. Protože uvedený příklad funguje tak, že i po vyhledání shodné hodnoty nadále PHP pokračuje v porovnávání a hledání hodnot dalších větví case, musí se doplnit konstrukce switch o příkaz break. Příklad:
Jakmile PHP v konstrukci switch narazí na break, další příkazy se již nevykonají a PHP se tak „nezdržuje“ s testováním dalších větví case a pokračuje až za konstrukcí switch. Další variantou je, že PHP při testování nenalezne žádnou shodnou hodnotu ve větvích case. Pro tento případ se vkládá další větev s názvem default. Příklad:
Ještě můžeme konstrukci switch „vylepšit“ o vykonání příkazu pro určitou skupinu. Příklad: