O PHP4 (mas 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 abreviatura, mas útil, da primeira:
foreach(expressao_array as $valor) instrucoes foreach(expressao_array as $chave => $valor) instrucoes |
A primeira forma varre uma dada matriz dada por expressao_array. Em cada 'loop', o valor do elemento corrente é atribuído a $valor e o ponteiro interno da matriz é avançado em uma posição (assim, no próxima iteração você estará olhando para o próximo elemento).
A segunda forma faz a mesma coisa, exceto pelo fato de que a chave do elemento atual será atribuído à variável $chave em cada iteração.
Nota: Quando o foreach inicia sua primeira execução, o ponteiro interno da matriz é zerado automaticamente para o primeiro elemento do array. 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 do array especificado, não o próprio array, portanto o ponteiro da array não é modificado como na instrução each(), que altera o elemento do array selecionado, mas isso não se reflete o array original.
Nota: foreach tem a habilidade de evitar mensagens de erro com '@'.
Você pode ter notado que os seguintes itens são funcionalmente idênticos:
reset ($arr); while (list(, $value) = each ($arr)) { echo "Valor: $value<br>\n"; } foreach ($arr as $value) { echo "Valor: $value<br>\n"; } |
reset ($arr); while (list($key, $value) = each ($arr)) { echo "Chave: $key; Valor: $value<br>\n"; } foreach ($arr as $key => $value) { echo "Chave: $key; Valor: $value<br>\n"; } |
Mais alguns exemplos para demonstrar os usos:
/* exemplo foreach 1: somente valores */ $a = array (1, 2, 3, 17); foreach ($a as $v) { print "Valor atual de \$a: $v.\n"; } /* exemplo foreach 2: valores (com as chaves impressas para ilustração) */ $a = array (1, 2, 3, 17); $i = 0; /* para exemplo somente */ foreach($a as $v) { print "\$a[$i] => $v.\n"; $i++; } /* exemplo foreach 3: chaves e valores */ $a = array ( "um" => 1, "dois" => 2, "três" => 3, "dezessete" => 17 ); foreach($a as $k => $v) { print "\$a[$k] => $v.\n"; } /* exemplo foreach 4: arrays multidimensionais */ $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"; } } /* exemplo foreach 5: arrays dinâmicos */ foreach(array(1, 2, 3, 4, 5) as $v) { print "$v\n"; } |