Minule jsme si povídali o řídicích strukturách a také jsme již probrali příkaz if. Dnes se podíváme na příkazy while, for a foreach.
Dnes se zase posuneme o kousek dále a objasníme si další řídicí struktury, které můžeme používat.
Příkaz while
Pro příkaz while po překladu do češtiny zjistíme, že se jedná o příkaz když.
while (expr) statement
?>
Podmínka uvedená v závorce se provede, pokud její hodnota bude TRUE. Když bude hodnota FALSE, neprovede se nic.
Zde máme jednoduchý příklad použití:
$i = 1;
while ($i <= 10): //pokud je $i mensi nebo rovno 10
echo $i; //zobrazime $i
$i++;
endwhile;
?>
V naší ukázce jsme proměnné $i přiřadili hodnotu 1 a stanovili podmínku. Když bude tato proměnná menší nebo rovna 10, zobrazíme tuto proměnnou a následně ji zvětšíme o 1.
Využití příkazu while je idealní pro zobrazování varovných hlášek při špatném odeslání formuláře nebo něčeho podobného.
Dalším užitečným příkazem pro nás bude příkaz for.
Příkaz for
for (expr1; expr2; expr3) statement
?>
První výraz (expr1) je ohodnocen (proveden) jednou, bezpodmínečně, na začátku cyklu. Na začátku každé iterace je ohodnocen výraz expr2. Pokud má hodnotu TRUE, cyklus pokračuje a zpracovává se kód uvnitř cyklu. Je-li naopak jeho hodnota FALSE, provádění cyklu končí. Na konci každé iterace se ohodnotí (provede) výraz expr3.
Každý z výrazů může být prázdný. Prázdný výraz expr2 znamená, že cyklus bude probíhat nekonečně dlouho (PHP, stejně jako C, implicitně předpokládá hodnotu TRUE). To nemusí být tak bez užitku, jak si můžete myslet. Často můžete totiž chtít ukončit cyklus pomocí podmíněného příkazu break (ale o tom jindy), namísto použití pravdivostního výrazu v příkazu cyklu for.
Klasický příklad:
for ($i=0;$i<10;$i++):
echo $i;
endfor;
//nebo
for ($i=10;$i>0;$i--):
echo $i;
endfor;
//i toto funguje
for ($i=0;$i<10;$i++):
if($i==5):
echo "Prave jsme dosahli pozadovane hodnoty ".$i;
else:
echo $i;
endif;
endfor;
//stejne tak se to da zapsat i takto
for ($i=0;$i<10;$i++)
{
if($i==5){
echo "Prave jsme dosahli pozadovane hodnoty ".$i;
}
else{
echo $i;
}
}
?>
Od verze PHP 4 máme k dispozici i příkaz foreach.
Příkaz foreach
PHP 4 (ne PHP 3) zahrnuje příkaz foreach, podobně jako Perl a různé další jazyky. To poskytuje snadný způsob k iteraci přes pole. Existují dvě syntaxe. Ta druhá je menším, avšak užitečným rozšířením té první:
foreach(array_expression as $value) statement
foreach(array_expression as $key => $value) statement
?>
První forma traverzuje pole dané výrazem array_expression. V každé iteraci je hodnota aktuálního elementu přiřazena do $value a vnitřní ukazatel na pole je zvýšen o jednotku (tzn. v příští iteraci budete hledět na následující element).
Druhá forma dělá totéž, kromě toho, že aktuální klíč elementu bude v každé iteraci přiřazen do proměnné $key.
Poznámka: Když foreach začne provádění první iterace, je vnitřní ukazatel automaticky nastaven na první element pole. To znamená, že před foreach nemusíte volat reset(). Uvědomte si také, že foreach pracuje na kopii specifikovaného pole, nikoli na poli samotném, a proto se změny na vráceném elementu na původním poli neprojeví.
foreach nepodporuje možnost potlačit chybová hlášení použitím @
.
Můžete si všimnout, že následující příklady jsou funkčně totožné:
reset ($arr);
while (list(, $value) = each ($arr)) {
echo "Hodnota: $value
\n";
}
//nebo
foreach ($arr as $value) {
echo "Hodnota: $value
\n";
}
?>
Následující příklady jsou rovněž funkčně totožné:
reset ($arr);
while (list($key, $value) = each ($arr)) {
echo "Klíč: $key; Hodnota: $value
\n";
}
//nebo
foreach ($arr as $key => $value) {
echo "Klíč: $key; Hodnota: $value
\n";
}
?>
Další příklady demonstrující použítí:
/* foreach příklad 1: hodnota (pro ilustraci je vypsán i klíč) */
$a = array (1, 2, 3, 17);
$i = 0; /* pouze pro ilustrativní účely */
foreach($a as $v) {
print "\$a[$i] => $v.\n";
$i++;
}
/* foreach příklad 2: vícerozměrná pole */
$a[0][0] = "a";
$a[0][1] = "b";
$a[1][0] = "y";
$a[1][1] = "z";
foreach($a as $v1) {
foreach ($v1 as $v2) {
print "$v2\n";
}
}
?>
Samozřejmě se dá používat i kombinace foreach a endforeach.
Úkol: Nechám vám volnou ruku. Vytvořte mi nějaký skript, kde použijete veškeré příkazy z této lekce.