Autor Zpráva
Vojtik
Profil
Dobrý den,
Můžete mi prosím říct význam foreache? Procházel jsem tutoriál na ITNetworku a moc jsem to nepochopil.

Děkuji za odpověď.
mckay
Profil
Vojtik:
Jak už název napovídá, jde o cyklus, který funguje stylem "pro každý". Pod tím "každý" si můžete například představit každý prvek pole.

Cyklus obecně funguje tak, že provádí své tělo vícekrát (nebo také říkáme, že iteruje) - v závislosti na nějaké podmínce. Podmínka pro foreach je taková, že cyklus proběhne pro všechny prvky.

Aplikujete-li tedy foreach na pole strukturované takto: [ "ahoj", "nazdar", "cau" ], cyklus proběhne celkem 3x, s každým průchodem (iterací) bude uvažovat jeden z prvků ahoj, nazdar, cau v tomto pořadí.

$pole = [ "ahoj", "nazdar", "cau" ];
foreach ($pole as $prvek)
{
  echo "Právě iteruji pro prvek: " . $prvek . PHP_EOL;
}

To samé by se samozřejmě dalo napsat s využitím cyklů for či while, ale smysl použití foreach-e je v tom, že je pro toto využití zamýšlen. Jako parametr mu dáte pole a on se provede tolikrát, kolik prvků v poli je, s každým svým průběhem, v proměnné následující za as obsahuje "další" hodnotu z pole, nad kterým prochází.

Příjemnou věcí, kterou dále můžete využít u foreache je přístup ke klíči i hodnotě uložené na tomto klíči v poli. Uvažujme pole strukturované takto: [ "teplota" => "100", "datum" => "dnes"]

$hodnoty = [ "teplota" => "100", "datum" => "dnes"];

foreach ($hodnoty as $klic => $hodnota)
{
  echo "Hodnota uložená pod klíčem " . $klic . " je " . $hodnota . PHP_EOL;
}

Výstupem pak bude:
Hodnota uložená pod klíčem teplota je 100
Hodnota uložená pod klíčem cas je dnes

K čemu to reálně je? Řekněme, že neznáte předem kolik prvků pole budete mít, ale víte, že s každým chcete provést nějakou operaci. Pak je foreach jasné řešení. V generičtějším případě ani nevíte, jak cílové pole bude vypadat a pak je foreach také vhodné řešení.

Obecně bych asi ale doporučil naučit se do budoucna anglicky a/nebo používat Google, protože PHP má hodně příjemnou dokumentaci dostupnou na php.net, pro foreach konkrétně zde.
Vojtik
Profil
Děkuji moc.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0