Učíme se PHP online a nekupujem knihy :o)

>> Pro všechny, kdo mají rádi tento jazyk nebo pro ty, kteří se v něm chějí zdokonalit.



Lekce 8: Cykly II - Foreach




- V 5. lekci jsem se zmínil o příkazu foreach, který slouží též na procházení pole, ale je trochu odlišný.
- Nejenom, že má jinou syntaxi, ale také prochází vždy celé pole od 0 do konce (u příkazu for jsme mohli nastavit od a do).
- Ale nebojte, lze cyklus ukončit stejně. Například přes break.
- Další jeho odlišnost je v tom, že může procházet pole, kde nejsou indexy, ale slova.


Jak na foreach


- Výše jsem zmínil, že může procházet pole, kde nejsou indexy, ale slova. Uvedu tedy příklad pole, kde nejsou indexy, ale slova.

$zvirata = array(
    "slon"   => 10,
    "ovce"   => 20,
    "pes"    => 30,
    "kocka"  => 40,
    "mys"    => 50
);
- Zde mám pole o 5-ti zvířatech, kde index má slovní formu a přiřazenou hodnotu.
- Nyní potřebuju toto pole vypsat a jak jinak, než přes foreach.
foreach ($zvirata as $zv)
{
    echo $zv."
"; }
- Takto vypadá základní syntaxe příkazu foreach.
- Jako první parametr je pole, poté slovíčko "jako" as a na konci nová proměnná, která reprezentuje jednotlivý řádky v poli. Jako proměnná $i u příkazu for.
- Tento způsob nám, ale moc nevyhovuje. Vypisujeme pouze hodnoty těch zvířat. My potřebujem i jejich názvy. Takže to trochu upravíme.
foreach ($zvirata as $zvire => $hodnota)
{
    echo $zvire." = $hodnota
"; }
- Tak a teď je to lepší. Proměnná $zvire nám bere název indexu a v $hodnota máme hodnotu.
- Všimněte si, že tvar foreach je dost podobný zápisu prvků do pole.

- Možná bude stát za ukázku to, jak použít foreach pro běžné pole.
$pole = array(1,2,3,4,5);

foreach ($pole as $i) echo $i."
"; // vypiseme pole (hodnoty) foreach ($pole as $i => $val) echo $i."
"; // vypiseme pouze index bez hodnot foreach ($pole as $i => $val) echo $i." = $val
"; // vypiseme indexy a hodnoty
- Jak vidíte, tak použití je celkem jasný a nelyší se od slovních indexů.
- Pokud budeme mít dvou-rozměrné pole, tak stejně jako u příkazu for použijeme 2x foreach.
$pole = array(
    array(1, 10, 100),
    array(2, 20, 200),
    array(3, 30, 300),
    array(4, 40, 400),
    array(5, 50, 500)
);

foreach ($pole as $arr) // projde pole poli
{
    // prochazi jednotliva pole a vypisuje (za kazdou hodnotu da carku)
    foreach ($arr as $i) echo $i.", ";
    echo "
"; // odradkuje po vypsani kazdeho pole }
- Možná se by se hodilo podotknout, že procházení pole přes foreach je rychlejší než přes jiný cykly (hlavně v PHP).


Přídavek k cyklu for


- Tyto věco jsem nenapsal k cyklům for, takže je napíšu sem.
- Stejně jako u příkazu while je pro nekonečný cyklus true, tak něco podobného má i příkaz for.

while (true) { /* neco */ } // nekonecny cyklus pro while

for (;;) { /* neco */ } // nekonecny cyklus pro for
- V příkazu for můžeme též spojít více podmínek a dokonce spojit dva cykly for do jednoho.
// definice dvou poli
$a = array(1,2,3,4,5,6,7,8,9);
$b = array(10,20,30,40,50,60,70,80,90,100);

// dva cykly for v jednom (cyklus bude tak dlouho trvat, dokud se neprojde nejmensi pole)
for ($i = 0, $j = 0; $i < count($a) && $j < count($b); $i++, $j++)
{
    echo "($a[$i] - $b[$j])
"; // vypise (1 - 10), (2 - 20)... }
- Upřímně nevim k čemu by zrovna tento příklad byl dobrý :-D ...ale nic jiného mě v rychlosti nenapadlo jak ukázat, že cyklus for muže mít více parametrů, které jsou oddělené čárkou.
- Ukážu ještě jeden příklad.
// prochazi vsechny cisla z ascii tabulky od A do Z a pocita pocet znaku
for ($znak = ord('A'), $pocet = 0; $znak <= ord('Z'); $znak++, ++$pocet)
{
    echo chr($znak)." = ".$znak."
"; } echo "Počet znaků je: ".$pocet;
- Celkem dobrý příklad, který ukazuje, že cyklus for má další proměnnou, která počítá počet cyklů. Mezitím proměnná pro číslo znaku má číslo jiné.
- Když už jsme u toho, tak tady je nový příkaz (funkce), která ze znaku vrátí dec. číslo z ascii tabulky a to ord(). Je to vlastně opak příkazu chr().


Dobrovolný domácí úkol


- Tady žádný úkoly dávat nebudu, protože vysvětlení je celkem obsáhlý a krom toho jsou to též cykly jako první části - Cykly I.


This page was loaded in 0.430202 seconds. © 2011-2025 by mimic | mimic.php5.cz
ICQ contact is 204-517-399