foreach

O PHP4 (não o PHP3) inclui uma construção foreach, muito parecido com o perl e outras linguagens. Isto simplesmente oferece uma maneira fácil de iterar sobre matrizes. Há duas sintaxes; a segunda é uma extensão menor, mas útil, da primeira:


foreach(array_expression as $value) statement
foreach(array_expression as $key => $value) statement
     

A primeira forma varre uma dada matriz dada por array_expression. Em cada 'loop', o valor do elemento corrente é atribuído a $value e o ponteiro interno da matriz é avançado em uma posição (assim, no próximo 'loop' você estará olhando para o próximo elemento).

A segunda forma faz a mesma coisa, exceto pelo fato de que a chave do elemento corrente será atribuído à variável $key em cada 'loop'.

Nota: Quando o foreach inicia sua primeira execução, o ponteiro interno da matriz é zerado automaticamente para o primeiro elemento da matriz. Isto significa que você não precisa chamar reset() antes de um 'loop' foreach.

Nota: Note também que foreach opera sobre uma cópia da matriz especificada, não na própria matriz, portanto o ponteiro da matriz não é modificado como na construção 'each'.

Você pode ter notado que os seguintes itens são funcionalmente idênticos:


reset ($arr);
while (list(, $value) = each ($arr)) {
    echo "Value: $value<br>\n";
}

foreach ($arr as $value) {
    echo "Value: $value<br>\n";
}
     

Os seguintes tanbém são funcionalmente idênticos:


reset ($arr);
while (list($key, $value) = each ($arr)) {
    echo "Key: $key; Value: $value<br>\n";
}

foreach ($arr as $key => $value) {
    echo "Key: $key; Value: $value<br>\n";
}
     

Mais alguns exemplos para demonstrar os usos:


/* exemplo de foreach 1: só valor */

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

foreach ($a as $v) {
   print "Valor corrente de \$a: $v.\n";
}

/* exemplo de foreach 2: valor (com a chave impressa para ilustração) */

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

$i = 0; /* só para propósito de ilustração */

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

/* exemplo de foreach 3: chave e valor */

$a = array (
    "one" => 1,
    "two" => 2,
    "three" => 3,
    "seventeen" => 17
);

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