O PHP4 (mas não o PHP3) inclui um construtor foreach, muito
parecido com o PERL e outras linguagens. Isto oferece uma maneira fácil de
iterar sobre matrizes. foreach funciona somente com arrays, e
lançará um erro se tentar utilizá-lo em uma variável de qualquer tipo
diferente ou em variáveis não inicializadas. 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, e portanto, o
ponteiro do array original não é modificado como na instrução
each(), que altera o elemento do array
selecionado, mas isso não se reflete o array original.
Entretanto, o ponteiro interno do array original
é movimentado pelo processamento do
array. Assuminfo que o laço foreach rode até o fim, o
ponteiro interno do array estará posicionado no fim do array.
Nota: foreach tem a habilidade de
evitar mensagens de erro com '@'.
Você pode ter notado que os seguintes itens são funcionalmente
idênticos:
<?php
$arr = array("one", "two", "three");
reset ($arr);
while (list(, $value) = each ($arr)) {
echo "Valor: $value<br>\n";
}
foreach ($arr as $value) {
echo "Valor: $value<br>\n";
}
?>
Os seguintes também são funcionalmente idênticos:
<?php
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";
}
?>