Forum und email
foreach

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().

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 příkazem 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";
}