Sophie

Sophie

distrib > Mandriva > 2008.1 > i586 > by-pkgid > 703d980c580707c382b4e43e25965bc5 > files > 5332

php-manual-pt_BR-5.2.4-1mdv2008.1.noarch.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML
><HEAD
><TITLE
>foreach</TITLE
><META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK
REL="HOME"
TITLE="Manual do PHP"
HREF="index.html"><LINK
REL="UP"
TITLE="Estruturas de Controle"
HREF="language.control-structures.html"><LINK
REL="PREVIOUS"
TITLE="for"
HREF="control-structures.for.html"><LINK
REL="NEXT"
TITLE="break"
HREF="control-structures.break.html"><META
HTTP-EQUIV="Content-type"
CONTENT="text/html; charset=UTF-8"></HEAD
><BODY
CLASS="sect1"
BGCOLOR="#FFFFFF"
TEXT="#000000"
LINK="#0000FF"
VLINK="#840084"
ALINK="#0000FF"
><DIV
CLASS="NAVHEADER"
><TABLE
SUMMARY="Header navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TH
COLSPAN="3"
ALIGN="center"
>Manual do PHP</TH
></TR
><TR
><TD
WIDTH="10%"
ALIGN="left"
VALIGN="bottom"
><A
HREF="control-structures.for.html"
ACCESSKEY="P"
>Anterior</A
></TD
><TD
WIDTH="80%"
ALIGN="center"
VALIGN="bottom"
>Capítulo 16. Estruturas de Controle</TD
><TD
WIDTH="10%"
ALIGN="right"
VALIGN="bottom"
><A
HREF="control-structures.break.html"
ACCESSKEY="N"
>Próxima</A
></TD
></TR
></TABLE
><HR
ALIGN="LEFT"
WIDTH="100%"></DIV
><DIV
CLASS="sect1"
><H1
CLASS="sect1"
><A
NAME="control-structures.foreach"
><TT
CLASS="literal"
>foreach</TT
></A
></H1
><P
>&#13;    O PHP4 inclui um construtor <TT
CLASS="literal"
>foreach</TT
>, muito
    parecido com o PERL e outras linguagens. Isto oferece uma maneira fácil de
    iterar sobre matrizes. <TT
CLASS="literal"
>foreach</TT
> 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 bem útil do que primeira:
    <DIV
CLASS="informalexample"
><P
></P
><A
NAME="AEN4715"
></A
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><PRE
CLASS="programlisting"
>foreach (expressao_array as $valor)
  instrucoes
foreach (expressao_array as $chave =&#62; $valor)
 instrucoes</PRE
></TD
></TR
></TABLE
><P
></P
></DIV
>
   </P
><P
>&#13;    A primeira forma varre uma dada matriz dada por
    <TT
CLASS="literal"
>expressao_array</TT
>. Em cada 'loop', o valor do elemento
    corrente é atribuído a <TT
CLASS="literal"
>$valor</TT
> 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).
   </P
><P
>&#13;    A segunda forma faz a mesma coisa, exceto pelo fato de que a chave do elemento
    atual será atribuído à variável
    <TT
CLASS="literal"
>$chave</TT
> em cada iteração.
   </P
><P
>&#13;    A partir do PHP 5, é posivel
    <A
HREF="language.oop5.iterations.html"
>iterar objetos</A
> também.
    </P
><P
>&#13;    <DIV
CLASS="note"
><BLOCKQUOTE
CLASS="note"
><P
><B
>Nota: </B
>
      Quando o <TT
CLASS="literal"
>foreach</TT
> 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
      <A
HREF="function.reset.html"
><B
CLASS="function"
>reset()</B
></A
> antes de um loop <TT
CLASS="literal"
>foreach</TT
>
      .
     </P
></BLOCKQUOTE
></DIV
>
   </P
><P
>&#13;    <DIV
CLASS="note"
><BLOCKQUOTE
CLASS="note"
><P
><B
>Nota: </B
>
      Note também que <TT
CLASS="literal"
>foreach</TT
> 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
      <A
HREF="function.each.html"
><B
CLASS="function"
>each()</B
></A
>, que altera o elemento do array
      selecionado, mas isso não se reflete o array original.
      Entretanto, o ponteiro interno do array original
      <SPAN
CLASS="emphasis"
><I
CLASS="emphasis"
>é</I
></SPAN
> movimentado pelo processamento do
      array. Assumindo que o laço foreach rode até o fim, o
      ponteiro interno do array estará posicionado no fim do array.
     </P
></BLOCKQUOTE
></DIV
>
   </P
><P
>&#13;    A partir do PHP 5, você pode modificar facilmente modificar os elementos da matriz precedendo
    <TT
CLASS="literal"
>$value</TT
> com &#38;. Isto irá definir uma
    <A
HREF="language.references.html"
>referencia</A
> ao invés de copiar o valor.
    <DIV
CLASS="informalexample"
><P
></P
><A
NAME="AEN4739"
></A
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><code><font color="#000000">
<font color="#0000BB">&lt;?php<br />$arr </font><font color="#007700">= array(</font><font color="#0000BB">1</font><font color="#007700">, </font><font color="#0000BB">2</font><font color="#007700">, </font><font color="#0000BB">3</font><font color="#007700">, </font><font color="#0000BB">4</font><font color="#007700">);<br />foreach (</font><font color="#0000BB">$arr </font><font color="#007700">as &amp;</font><font color="#0000BB">$value</font><font color="#007700">) {<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$value </font><font color="#007700">= </font><font color="#0000BB">$value </font><font color="#007700">* </font><font color="#0000BB">2</font><font color="#007700">;<br />}<br /></font><font color="#FF8000">// $arr is now array(2, 4, 6, 8)<br /></font><font color="#0000BB">?&gt;</font>
</font>
</code></TD
></TR
></TABLE
><P
></P
></DIV
>
    Isto é possível apenas se a matriz interada puder ser referencia
    (ex. é variável).
   </P
><P
>&#13;    <DIV
CLASS="note"
><BLOCKQUOTE
CLASS="note"
><P
><B
>Nota: </B
>
      <TT
CLASS="literal"
>foreach</TT
> tem a habilidade de
      evitar mensagens de erro com '@'.
     </P
></BLOCKQUOTE
></DIV
>
   </P
><P
>&#13;    Você pode ter notado que os seguintes itens são funcionalmente
    idênticos:
    <DIV
CLASS="informalexample"
><P
></P
><A
NAME="AEN4746"
></A
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><code><font color="#000000">
<font color="#0000BB">&lt;?php<br />$arr </font><font color="#007700">= array(</font><font color="#DD0000">"um"</font><font color="#007700">, </font><font color="#DD0000">"dois"</font><font color="#007700">, </font><font color="#DD0000">"três"</font><font color="#007700">);<br /></font><font color="#0000BB">reset </font><font color="#007700">(</font><font color="#0000BB">$arr</font><font color="#007700">);<br />while (list(, </font><font color="#0000BB">$value</font><font color="#007700">) = </font><font color="#0000BB">each </font><font color="#007700">(</font><font color="#0000BB">$arr</font><font color="#007700">)) {<br />&nbsp;&nbsp;&nbsp;&nbsp;echo </font><font color="#DD0000">"Valor: $value&lt;br /&gt;</font><font color="#007700">\n</font><font color="#DD0000">"</font><font color="#007700">;<br />}<br /><br />foreach (</font><font color="#0000BB">$arr </font><font color="#007700">as </font><font color="#0000BB">$value</font><font color="#007700">) {<br />&nbsp;&nbsp;&nbsp;&nbsp;echo </font><font color="#DD0000">"Valor: $value&lt;br /&gt;</font><font color="#007700">\n</font><font color="#DD0000">"</font><font color="#007700">;<br />}<br /></font><font color="#0000BB">?&gt;</font>
</font>
</code></TD
></TR
></TABLE
><P
></P
></DIV
>
    Os seguintes também são funcionalmente idênticos:
    <DIV
CLASS="informalexample"
><P
></P
><A
NAME="AEN4748"
></A
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><code><font color="#000000">
<font color="#0000BB">&lt;?php<br />$arr </font><font color="#007700">= array(</font><font color="#DD0000">"one"</font><font color="#007700">, </font><font color="#DD0000">"two"</font><font color="#007700">, </font><font color="#DD0000">"three"</font><font color="#007700">);<br /></font><font color="#0000BB">reset</font><font color="#007700">(</font><font color="#0000BB">$arr</font><font color="#007700">);<br />while (list(</font><font color="#0000BB">$key</font><font color="#007700">, </font><font color="#0000BB">$value</font><font color="#007700">) = </font><font color="#0000BB">each </font><font color="#007700">(</font><font color="#0000BB">$arr</font><font color="#007700">)) {<br />&nbsp;&nbsp;&nbsp;&nbsp;echo </font><font color="#DD0000">"Chave: $key; Valor: $value&lt;br /&gt;</font><font color="#007700">\n</font><font color="#DD0000">"</font><font color="#007700">;<br />}<br /><br />foreach (</font><font color="#0000BB">$arr </font><font color="#007700">as </font><font color="#0000BB">$key </font><font color="#007700">=&gt; </font><font color="#0000BB">$value</font><font color="#007700">) {<br />&nbsp;&nbsp;&nbsp;&nbsp;echo </font><font color="#DD0000">"Chave: $key; Valor: $value&lt;br /&gt;</font><font color="#007700">\n</font><font color="#DD0000">"</font><font color="#007700">;<br />}<br /></font><font color="#0000BB">?&gt;</font>
</font>
</code></TD
></TR
></TABLE
><P
></P
></DIV
>
   </P
><P
>&#13;    Mais alguns exemplos para demonstrar os usos:
    <DIV
CLASS="informalexample"
><P
></P
><A
NAME="AEN4751"
></A
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><code><font color="#000000">
<font color="#0000BB">&lt;?php<br /></font><font color="#FF8000">/* exemplo foreach 1: somente valores */<br /><br /></font><font color="#0000BB">$a </font><font color="#007700">= array(</font><font color="#0000BB">1</font><font color="#007700">, </font><font color="#0000BB">2</font><font color="#007700">, </font><font color="#0000BB">3</font><font color="#007700">, </font><font color="#0000BB">17</font><font color="#007700">);<br /><br />foreach (</font><font color="#0000BB">$a </font><font color="#007700">as </font><font color="#0000BB">$v</font><font color="#007700">) {<br />&nbsp;&nbsp;&nbsp;echo </font><font color="#DD0000">"Valor atual de </font><font color="#007700">\$</font><font color="#DD0000">a: $v.</font><font color="#007700">\n</font><font color="#DD0000">"</font><font color="#007700">;<br />}<br /><br /></font><font color="#FF8000">/* exemplo foreach 2: valores (com as chaves impressas para ilustração) */<br /><br /></font><font color="#0000BB">$a </font><font color="#007700">= array(</font><font color="#0000BB">1</font><font color="#007700">, </font><font color="#0000BB">2</font><font color="#007700">, </font><font color="#0000BB">3</font><font color="#007700">, </font><font color="#0000BB">17</font><font color="#007700">);<br /><br /></font><font color="#0000BB">$i </font><font color="#007700">= </font><font color="#0000BB">0</font><font color="#007700">; </font><font color="#FF8000">/* para exemplo somente */<br /><br /></font><font color="#007700">foreach (</font><font color="#0000BB">$a </font><font color="#007700">as </font><font color="#0000BB">$v</font><font color="#007700">) {<br />&nbsp;&nbsp;&nbsp;&nbsp;echo </font><font color="#DD0000">"</font><font color="#007700">\$</font><font color="#DD0000">a</font><font color="#007700">[</font><font color="#DD0000">$i</font><font color="#007700">]</font><font color="#DD0000"> =&gt; $v.</font><font color="#007700">\n</font><font color="#DD0000">"</font><font color="#007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$i</font><font color="#007700">++;<br />}<br /><br /></font><font color="#FF8000">/* exemplo foreach 3: chaves e valores */<br /><br /></font><font color="#0000BB">$a </font><font color="#007700">= array (<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#DD0000">"um" </font><font color="#007700">=&gt; </font><font color="#0000BB">1</font><font color="#007700">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#DD0000">"dois" </font><font color="#007700">=&gt; </font><font color="#0000BB">2</font><font color="#007700">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#DD0000">"três" </font><font color="#007700">=&gt; </font><font color="#0000BB">3</font><font color="#007700">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#DD0000">"dezessete" </font><font color="#007700">=&gt; </font><font color="#0000BB">17<br /></font><font color="#007700">);<br /><br />foreach (</font><font color="#0000BB">$a </font><font color="#007700">as </font><font color="#0000BB">$k </font><font color="#007700">=&gt; </font><font color="#0000BB">$v</font><font color="#007700">) {<br />&nbsp;&nbsp;&nbsp;&nbsp;echo </font><font color="#DD0000">"</font><font color="#007700">\$</font><font color="#DD0000">a</font><font color="#007700">[</font><font color="#DD0000">$k</font><font color="#007700">]</font><font color="#DD0000"> =&gt; $v.</font><font color="#007700">\n</font><font color="#DD0000">"</font><font color="#007700">;<br />}<br /><br /></font><font color="#FF8000">/* exemplo foreach 4: arrays multidimensionais */<br /><br /></font><font color="#0000BB">$a </font><font color="#007700">= array();<br /></font><font color="#0000BB">$a</font><font color="#007700">[</font><font color="#0000BB">0</font><font color="#007700">][</font><font color="#0000BB">0</font><font color="#007700">] = </font><font color="#DD0000">"a"</font><font color="#007700">;<br /></font><font color="#0000BB">$a</font><font color="#007700">[</font><font color="#0000BB">0</font><font color="#007700">][</font><font color="#0000BB">1</font><font color="#007700">] = </font><font color="#DD0000">"b"</font><font color="#007700">;<br /></font><font color="#0000BB">$a</font><font color="#007700">[</font><font color="#0000BB">1</font><font color="#007700">][</font><font color="#0000BB">0</font><font color="#007700">] = </font><font color="#DD0000">"y"</font><font color="#007700">;<br /></font><font color="#0000BB">$a</font><font color="#007700">[</font><font color="#0000BB">1</font><font color="#007700">][</font><font color="#0000BB">1</font><font color="#007700">] = </font><font color="#DD0000">"z"</font><font color="#007700">;<br /><br />foreach (</font><font color="#0000BB">$a </font><font color="#007700">as </font><font color="#0000BB">$v1</font><font color="#007700">) {<br />&nbsp;&nbsp;&nbsp;&nbsp;foreach (</font><font color="#0000BB">$v1 </font><font color="#007700">as </font><font color="#0000BB">$v2</font><font color="#007700">) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo </font><font color="#DD0000">"$v2</font><font color="#007700">\n</font><font color="#DD0000">"</font><font color="#007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br /></font><font color="#FF8000">/* exemplo foreach 5: arrays dinâmicos */<br /><br /></font><font color="#007700">foreach (array(</font><font color="#0000BB">1</font><font color="#007700">, </font><font color="#0000BB">2</font><font color="#007700">, </font><font color="#0000BB">3</font><font color="#007700">, </font><font color="#0000BB">4</font><font color="#007700">, </font><font color="#0000BB">5</font><font color="#007700">) as </font><font color="#0000BB">$v</font><font color="#007700">) {<br />&nbsp;&nbsp;&nbsp;&nbsp;echo </font><font color="#DD0000">"$v</font><font color="#007700">\n</font><font color="#DD0000">"</font><font color="#007700">;<br />}<br /></font><font color="#0000BB">?&gt;</font>
</font>
</code></TD
></TR
></TABLE
><P
></P
></DIV
>
   </P
></DIV
><DIV
CLASS="NAVFOOTER"
><HR
ALIGN="LEFT"
WIDTH="100%"><TABLE
SUMMARY="Footer navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
><A
HREF="control-structures.for.html"
ACCESSKEY="P"
>Anterior</A
></TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="index.html"
ACCESSKEY="H"
>Principal</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
><A
HREF="control-structures.break.html"
ACCESSKEY="N"
>Próxima</A
></TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
><TT
CLASS="literal"
>for</TT
></TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="language.control-structures.html"
ACCESSKEY="U"
>Acima</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
><TT
CLASS="literal"
>break</TT
></TD
></TR
></TABLE
></DIV
></BODY
></HTML
>