Pole a cykly

Pole a cykly

Cykly nám slouží k tomu, abychom mohli nějaký kód vykonávat opakovaně. Používají se např. na výpis prvků z pole, na generování tabulek nebo seznamů apod. Máme dva základní typy, while a for. Nejdříve se podíváme na while.

while

While se zapisuje podobně jako if. Použije se klíčové slovo while, potom se do kulatých závorek zapíše podmínka, do kdy má cyklus probíhat, následují složené závorky, ve kterých je zapsán kód, který chceme opakovat.

$cislo = 0;

while ($cislo <= 10) {
    echo $cislo;
    $cislo = $cislo + 1;
}
//vypíše 012345678910

Nejprve si inicializujeme proměnnou $cislo, které budeme chtít vypisovat vždy zvětšené o 1. Poté následuje while, kde zapíšeme do kulatých závorek podmínku, že dokud bude číslo menší nebo rovno 10, kód bude probíhat. A poté do složených závorek, co se bude dít. My chceme vypsat číslo echo $cislo. No jo, jenže takhle by se nám do nekonečna vypisovala 0, to nechceme. Vlastně bychom tím zavařili počítač 😀 Proto si po vypsání čísla musíme to číslo ještě zvýšit. To nám zajistí zápis: $cislo = $cislo + 1.

for

For se zapisuje trochu jinak, ale dělá v podstatě to samé. Jeho výhodou je, že na rozdíl od whileu jeho syntax vynucuje inicializaci proměnné a její modifikaci.

for ($cislo = 0; $cislo <= 10; $cislo = $cislo + 1) {
    echo $cislo;
}
//vypíše 012345678910

Tento kód udělá úplně to samé, co kód v prvním příkladu. Na počet řádků je ale kratší a nemůže se nám stát, že bychom si zapomněli nastavit nebo změnit proměnnou. Kdybyste zapomněli, for bude špatně zapsán a vyhodí chybu, resp. už váš editor (VS Code) vyznačí chybu v syntaxi, což by vás mělo varovat, že je někde něco špatně.

While by se „zacyklil“, což může skončit až zamrznutím počítače, pokud nezjistíte zacyklení včas. Samozřejmě když budete dostatečně „šikovní“, a že se to občas stane každému, můžete si různými způsoby zacyklit i for.

Důležité je, že ve většině případů, jsou cykly while a for zaměnitelné. S cyklem for se však v praxi setkáte mnohem častěji, jelikož je z jeho zápisu rychleji pochopitelné, co se bude dít, jeho nevýhodou však je, že musíte předem znát počet opakování, které chcete provést.

Pole

Pole je další z datových typů. Už známe řetězec (string), celé číslo (integer), desetinné číslo (float) a logickou hodnotu (boolean, nabývá hodnot TRUE nebo FALSE).

Do pole můžeme uložit více hodnot, které mohou být různých datových typů. Snažíme se ale datové typy hodnot příliš nekombinovat. Pole totiž zpravidla používáme pro hodnoty, které spolu mají něco společného, mohou to být např. seznamy jmen, čísel apod.

<?php

$zelenina = ["mrkev", "petržel", "zelí", "paprika"];

?>

Každá hodnota v poli má svůj index. Index je číselné vyjádření pozice hodnoty v poli. POZOR, indexy se počítají od nuly. První hodnota v poli má tedy index 0, druhá hodnota má index 1, třetí index 2 atd.

<?php

$zelenina = ["mrkev", "petržel", "zelí", "paprika"];


/**
 * tento kód tedy vypíše:
 * zelí
 */
echo $zelenina[2];

?>

Přiřazení další hodnoty do pole provedeme jednoduše přes příkaz $pole[] = "hodnota";. Při tomto zápisu se hodnota uloží jako poslední prvek pole. Hodnotu můžeme přiřadit i na určité místo v poli, např. $pole[2] = "hodnota";. Je ale důležité vědět, že tímto si přepíšeme původní hodnotu, která byla v poli na této pozici.

<?php

$zelenina = ["mrkev", "petržel", "zelí", "paprika"];


/**
 * tento zápis nám přidá další hodnotu na konec pole,
 * výsledek tedy bude vypadat takto:
 * $zelenina = ["mrkev", "petržel", "zelí", "paprika", "okurka"];
 */
$zelenina[] = "okurka";


?>
<?php

$zelenina = ["mrkev", "petržel", "zelí", "paprika"];


/**
 * @at tímto kódem přepíšeme hodnotu na indexu 1,
 * výsledkem bude:
 * $zelenina = ["mrkev", "okurka", "zelí", "paprika"];
 */
$zelenina[1] = "okurka";


?>

Asociativní Pole

Asociativní pole se vyznačuje tím, že má pojmenovaný index. Takovému pojmenovanému indexu se říká klíč. U pojmenovávání klíčů platí stejná pravidla jako u pojmenovávání proměnných, nepoužíváme diakritiku a ve víceslovných názvech začíná první slovo malým písmenem, každé další pak velkým.

<?php

/**
 * zde už nám nevadí kombinovat různé datové typy
 */
$osoba = [
    "jmeno" => "Áňa",
    "prijmeni" => "Tůmová",
    "vek" => 27,
    "trvaleBydliste" => "České Budějovice",
    "zena" => true,
];

?>

Přiřazení dalšího prvku do pole je podobné jako u „obyčejného“ pole. $pole["klic"] = "hodnota";

Pokud takovýto klíč ještě neexistuje, přiřadí se dvojice klíč-hodnota na konec pole, pokud klíč existuje, původní hodnota je nahrazena novou.

<?php

$osoba = [
    "jmeno" => "Áňa",
    "prijmeni" => "Tůmová",
    "vek" => 27,
    "trvaleBydliste" => "České Budějovice",
    "zena" => true,
];


/**
 * výsledné pole bude vypadat takto:
 * $osoba = ["jmeno" => "Áňa", "prijmeni" => "Tůmová", "vek" => 27, "trvaleBydliste" => "České Budějovice", "zena" => true, "pracovniPozice" => "programátor"];
 */
$osoba["pracovniPozice"] = "programátor";

?>
<?php

$osoba = [
    "jmeno" => "Áňa",
    "prijmeni" => "Tůmová",
    "vek" => 27,
    "trvaleBydliste" => "České Budějovice",
    "zena" => true,
];


/**
 * výsledné pole bude vypadat takto:
 * $osoba = ["jmeno" => "Anna", "prijmeni" => "Tůmová", "vek" => 27, "trvaleBydliste" => "České Budějovice", "zena" => true];
 */
$osoba["jmeno"] = "Anna";

?>

Cyklus foreach

Asi nejjednodušší způsob, jak vypisovat prvky z pole, je použít cyklus foreach. Foreach si totiž vezme pole a vyhodnocuje každý prvek. Až dojde na konec pole, skončí.

$misaOvoce = ["jablko", "banán", "hruška", "pomeranč", "kiwi"];

foreach ($misaOvoce as $kusOvoce) {
    echo $kusOvoce . ", ";
}
// vypíše jablko, banán, hruška, pomeranč, kiwi,

Foreachu předáme pole $misaOvoce a pojmenujeme si prvek, který bude vypisovat $kusOvoce. V prvním průchodu cyklu je v proměnné $kusOvoce hodnota „jablko“. Vypíšeme jablko a jdeme do dalšího průchodu cyklu. Teď máme v $kusOvoce „banán“, takže vypíšeme banán a jdeme do dalšího průchodu...a tak až do konce 😀

Já mám ale asociativní pole“, řeknete. To ničemu nevadí. Pokud chcete vypisovat jen hodnoty a ne klíče, použijte foreach úplně stejně jako v předchozím příkladu.

$osoba = [
    "jmeno" => "Áňa",
    "prijmeni" => "Tůmová",
    "vek" => 27,
];
foreach ($osoba as $udaj) {
    echo $udaj . " ";
}
// vypíše Áňa Tůmová 27

Co když vás ale zajímá i ten klíč?

$osoba = [
    "jmeno" => "Áňa",
    "prijmeni" => "Tůmová",
    "vek" => 27,
];

foreach ($osoba as $typUdaje => $hodnotaUdaje) {
    echo $typUdaje . ": " . $hodnotaUdaje . ", ";
}
// vypíše jmeno: Áňa, prijmeni: Tůmová, vek: 27

Cyklu předáme pole $osoba a stejně, jako jsme si pojmenovávali předtím prvek, teď si pojmenujeme klíč $typUdaje i prvek $hodnotaUdaje. Vnitřek cyklu je stejný, vypisujeme, co potřebujeme.

Ve všech příkladech používám uvnitř cyklu jen echo. To je jen pro demonstraci, v praxi samozřejmě v cyklu můžete provádět jakékoli jiné další příkazy.