foreach

PHP 4 (ne PHP 3) zahrnuje konstrukt 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().

Poznßmka: Uv∞domte si takΘ, ╛e foreach pracuje na kopii specifikovanΘho pole, nikoli na poli samotnΘm, proto ukazatel na pole nenφ modifikovßn tak, jako konstruktem each() a zm∞ny na vrßcenΘm elementu se na p∙vodnφm poli neprojevφ.

Poznßmka: 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<br>\n";
}

foreach ($arr as $value) {
    echo "Hodnota: $value<br>\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<br>\n";
}

foreach ($arr as $key => $value) {
    echo "KlφΦ: $key; Hodnota: $value<br>\n";
}

Dal╣φ p°φklady demonstrujφcφ pou╛φtφ:

/* foreach p°φklad 1: pouze hodnota */

$a = array (1, 2, 3, 17);

foreach ($a as $v) {
   print "SouΦasnß hodnota \$a: $v.\n";
}

/* foreach p°φklad 2: 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 3: klφΦ a hodnota */

$a = array (
    "jedna" => 1,
    "dv∞" => 2,
    "t°i" => 3,
    "sedmnßct" => 17
);

foreach($a as $k => $v) {
    print "\$a[$k] => $v.\n";
}

/* foreach p°φklad 4: 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";
    }
}

/* foreach p°φklad 5: dynamickß pole */

foreach(array(1, 2, 3, 4, 5) as $v) {
    print "$v\n";
}