Lekce 4: Cykly
- Tak, a jsme u mého oblíbeného tématu a to jsou cykly. Proč oblíbeného? Protože s cyklama si jde hodně "vyhrát". Za chvíli uvidite proč a hlavně pozor, ať se nezacyklíte.
- Cykly máme celkem 3, každý se v něčem liší a použivá při jiné příležitosti. Pokusím se to nějak stručně vysvělit na přikladech.
Protože mi přijde, že na pochopení to je rozhodně lepší.
- Prvním typem je cyklus for. Tento cyklus je typický tím, že se použivá většinou v případech, kdy známe počet opakování.
- Ze začátku to může být matoucí, protože má 3 parametry, ale uvidíte, že to opravdu není nic težkého. Ukažme si tedy příklad.
/*
* 1. parametr urcuje od jakeho cisla (pozice) se ma zacit cyklit
* 2. nam urcuje podminku, pod kterou ma probihat cyklus, v tomto pripade pojede tak dlouho,
* dokud bude $i mensi nez 5, takze 5x
* 3. inkrementace cyklu (o kolik si zvysi hodnota $i po kazdem opakovani)
*/
for ($i = 0; $i < 5; $i++)
{
echo "ahoj"; // vypise 5x "ahoj"
}
- Jednoduché že? Tak teď zkusíme další typ cyklu a to je while. Tento liší jen tím, že neznáme počet opakování,
takže bude probíhat tak dlouho, dokud bude splněna podmínka.
$i = 0; // nastavime prvni hodnotu
// bude probihat tak dlouho, dokud $i bude mensi nez 5
while ($i < 5)
{
echo "ahoj"; // vypise 5x "ahoj"
$i++; // zvysi $i o 1
}
- A na konec poslední typ cyklu a tím je do. Je to vlastně brácha cyklus while, protože je naprosto stejný,
jen s tím rozdílem, že podmínka je na konci. Pro nás to tedy znamená, že cyklus proběhne minimálně jednou.
$i = 0; // nastavime prvni hodnotu
do
{
echo "ahoj"; // vypise 5x "ahoj"
$i++; // zvysi $i o 1
}
while ($i < 5); // bude probihat tak dlouho, dokud $i bude mensi nez 5
- Tyto 3 typy cyklů budeme používat a bude vždy na vás, aby jste zjistili s jakým typem to bude nejefektivnější.
for ($i = 0; $i < 5; $i++)
{
if ($i == 3) break; // ukonci cyklus, pokud $i bude 3
echo "ahoj"; // vypise 3x "ahoj"
}
- Také se můžeme setkat s příkazem continue, který je užitečný v tom, že přeskočí celý cyklus, ale neukončí ho.
for ($i = 0; $i < 5; $i++)
{
// pokud $i bude 2 nebo 4, tak preskoci vse za podminkou
if ($i == 2 || $i == 4) continue;
echo $i; // vypise 0,1,3
}
- Další věc co jde s cyklama dělat je vnořit cyklus do jiného (né jen jednou).
/* Vypise:
* 0 1 2 3 4
* 1 2 3 4 5
* 2 3 4 5 6
* 3 4 5 6 7
* 4 5 6 7 8
*/
// cyklus probehne 5x
for ($i = 0; $i < 5; $i++)
{
// tento cyklus taky 5x (musi mit jiny nazev promenne nez prvni ($i a $j))
for ($j = 0; $j < 5; $j++)
{
echo $j + $i." "; // secteme $i a $j + pridame mezeru
}
echo "
"; // vytvorime novy radek (lze take jako \n nebo \v)
}
- K závěru se ještě naučíme dva nový příkazy. Jeden pro zjištění délky řetězce a tím je strlen(string) a
druhý pro převedení dec. čísla na znak a to přes chr(int).
echo strlen("ahoj svete"); // 10 (pocita vse i bile znaky - mezera)
echo chr(64); // vypise @
- Doporučuji se cykly pořádně naučit, protože v další lekci bych nejspíš začal pole a dostane se i na cykly.
1) Vypište přes cyklus všechna čísla od 1-100, která jsou sudá a dělitelná 4.
// inkrementuji od 0 po 2, protoze chceme jen suda cisla
for ($i = 0; $i < 101; $i += 2)
{
// pokud $i bude 0 nebo nebude delitelne 4, tak cislo preskocim
if (!$i || $i % 4) continue;
echo $i;
}
2) Vygenerujte HTML tabulku přes tag <table>, která bude mít 5 řádků a na každém 3 buňky (5x3).
$table = ""; // budouci obsah vnitrku tabulky
// cyklus pro radky
for ($i = 0; $i < 5; $i++)
{
$table.= "<tr>";
// cyklus pro bunky
for ($j = 0; $j < 3; $j++)
{
$table.= "<td>Buňka $j</td>";
}
$table.= "</tr>";
}
echo "
for ($i = 0; $i < 128; $i++)
{
echo $i.") ".chr($i)."
";
}
4) Uložte do proměnné nějaký text a přes cyklus ho vypište pozpátku.
$text = "Ahoj světe!"; /* vytvorime cyklus pozpatku, kde velikost $i bude pocet znaku v promenne $text * (-1 proto, protoze cyklus je od 0) * a vypiseme jmeno, kde hranate zavorky oznacuji pozici pismene */ for ($i = strlen($text) - 1; $i >= 0; $i--) echo $text[$i];