<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/language.control-structures.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'es',
  ),
  'this' => 
  array (
    0 => 'control-structures.for.php',
    1 => 'for',
    2 => 'for',
  ),
  'up' => 
  array (
    0 => 'language.control-structures.php',
    1 => 'Estructuras de Control',
  ),
  'prev' => 
  array (
    0 => 'control-structures.do.while.php',
    1 => 'do-while',
  ),
  'next' => 
  array (
    0 => 'control-structures.foreach.php',
    1 => 'foreach',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'es',
    'path' => 'language/control-structures/for.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="control-structures.for" class="sect1">
 <h2 class="title">for</h2>
 <p class="verinfo">(PHP 4, PHP 5, PHP 7, PHP 8)</p>
 <p class="para">
  Los bucles <code class="literal">for</code> son los más complejos en PHP.
  Funcionan como los bucles for del lenguaje C.
  La sintaxis de los bucles <code class="literal">for</code> es la siguiente:
  <div class="informalexample">
   <div class="example-contents">
<div class="annotation-interactive cdata"><pre>
for (expr1; expr2; expr3)
    comandos
</pre></div>
   </div>

  </div>
 </p>
 <p class="simpara">
  La primera expresión (<var class="varname">expr1</var>) es
  evaluada (ejecutada) una sola vez, sin condición, al
  inicio del bucle.
 </p>
 <p class="simpara">
  Al inicio de cada iteración, la expresión
  <var class="varname">expr2</var> es evaluada.
  Si la evaluación es <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong>, el bucle
  continúa y los comandos son ejecutados. Si
  la evaluación es <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>,
  la ejecución del bucle se detiene.
 </p>
 <p class="simpara">
  Al final de cada iteración, la expresión
  <var class="varname">expr3</var> es evaluada
  (ejecutada).
 </p>
 <p class="simpara">
  Cada una de las expresiones puede estar
  vacía o puede contener varias expresiones separadas por comas.
  En <var class="varname">expr2</var>, todas las expresiones separadas por una coma
  son evaluadas pero el resultado se obtiene desde la última parte.
  Si la expresión <var class="varname">expr2</var>
  es dejada vacía, esto significa que es un bucle infinito
  (PHP considera implícitamente que vale <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong>,
  como en C). Esto puede ser menos inútil de lo que parece, ya que a menudo se
  desea terminar el bucle con una instrucción condicional
  <a href="control-structures.break.php" class="link"><code class="literal">break</code></a>
  en lugar de usar la expresión de verdad del <code class="literal">for</code>.
 </p>
 <p class="para">
  Considérense los siguientes ejemplos. Todos muestran los números enteros de
  1 a 10:
  <div class="informalexample">
   <div class="example-contents">
<div class="annotation-interactive phpcode"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php
</span><span style="color: #007700">for (</span><span style="color: #0000BB">$i </span><span style="color: #007700">= </span><span style="color: #0000BB">1</span><span style="color: #007700">; </span><span style="color: #0000BB">$i </span><span style="color: #007700">&lt;= </span><span style="color: #0000BB">10</span><span style="color: #007700">; </span><span style="color: #0000BB">$i</span><span style="color: #007700">++) {
    echo </span><span style="color: #0000BB">$i </span><span style="color: #007700">. </span><span style="color: #DD0000">" "</span><span style="color: #007700">;
}</span></code></pre></div>
   </div>

   <p class="simpara">El ejemplo anterior mostrará:</p>
   <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
1 2 3 4 5 6 7 8 9 10
</pre></div>
   </div>
  </div>
  <div class="informalexample">
   <div class="example-contents">
<div class="annotation-interactive phpcode"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php
</span><span style="color: #007700">for (</span><span style="color: #0000BB">$i </span><span style="color: #007700">= </span><span style="color: #0000BB">1</span><span style="color: #007700">; ; </span><span style="color: #0000BB">$i</span><span style="color: #007700">++) {
    if (</span><span style="color: #0000BB">$i </span><span style="color: #007700">&gt; </span><span style="color: #0000BB">10</span><span style="color: #007700">) {
        break;
    }
    echo </span><span style="color: #0000BB">$i </span><span style="color: #007700">. </span><span style="color: #DD0000">" "</span><span style="color: #007700">;
}</span></code></pre></div>
   </div>

   <p class="simpara">El ejemplo anterior mostrará:</p>
   <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
1 2 3 4 5 6 7 8 9 10
</pre></div>
   </div>
  </div>
  <div class="informalexample">
   <div class="example-contents">
<div class="annotation-interactive phpcode"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php
$i </span><span style="color: #007700">= </span><span style="color: #0000BB">1</span><span style="color: #007700">;
for (; ; ) {
    if (</span><span style="color: #0000BB">$i </span><span style="color: #007700">&gt; </span><span style="color: #0000BB">10</span><span style="color: #007700">) {
        break;
    }
    echo </span><span style="color: #0000BB">$i </span><span style="color: #007700">. </span><span style="color: #DD0000">" "</span><span style="color: #007700">;
    </span><span style="color: #0000BB">$i</span><span style="color: #007700">++;
}</span></code></pre></div>
   </div>

   <p class="simpara">El ejemplo anterior mostrará:</p>
   <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
1 2 3 4 5 6 7 8 9 10
</pre></div>
   </div>
  </div>
  <div class="informalexample">
   <div class="example-contents">
<div class="annotation-interactive phpcode"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php
</span><span style="color: #007700">for (</span><span style="color: #0000BB">$i </span><span style="color: #007700">= </span><span style="color: #0000BB">1</span><span style="color: #007700">, </span><span style="color: #0000BB">$j </span><span style="color: #007700">= </span><span style="color: #0000BB">0</span><span style="color: #007700">; </span><span style="color: #0000BB">$i </span><span style="color: #007700">&lt;= </span><span style="color: #0000BB">10</span><span style="color: #007700">; </span><span style="color: #0000BB">$j </span><span style="color: #007700">+= </span><span style="color: #0000BB">$i</span><span style="color: #007700">, print </span><span style="color: #0000BB">$i </span><span style="color: #007700">. </span><span style="color: #DD0000">" "</span><span style="color: #007700">, </span><span style="color: #0000BB">$i</span><span style="color: #007700">++);</span></code></pre></div>
   </div>

   <p class="simpara">El ejemplo anterior mostrará:</p>
   <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
1 2 3 4 5 6 7 8 9 10
</pre></div>
   </div>
  </div>
 </p>
 <p class="simpara">
  Por supuesto, el primer ejemplo es el más simple
  de todos (o quizás el cuarto), pero también se puede pensar que usar una expresión vacía en un
  bucle <code class="literal">for</code> puede ser útil a veces.
 </p>
 <p class="para">
  PHP también soporta la siguiente sintaxis alternativa para los bucles
  <code class="literal">for</code>:
  <div class="informalexample">
   <div class="example-contents">
<div class="annotation-interactive cdata"><pre>
for (expr1; expr2; expr3):
    comandos
    ...
endfor;
</pre></div>
   </div>

  </div>
 </p>
 <p class="simpara">
  Las expresiones <var class="varname">expr2</var> y <var class="varname">expr3</var> se
  evalúan en cada iteración. Es aconsejable usar expresiones simples en estos
  lugares para evitar problemas de rendimiento. Por ejemplo, si el número de
  iteraciones se conoce de antemano, es mejor usar una variable en lugar de una
  llamada a función en <var class="varname">expr2</var>:
 </p>
 <p class="para">
  <div class="informalexample">
   <div class="example-contents">
<div class="annotation-non-interactive phpcode"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php

$people </span><span style="color: #007700">= [</span><span style="color: #DD0000">'Kalle'</span><span style="color: #007700">, </span><span style="color: #DD0000">'Pierre'</span><span style="color: #007700">];

</span><span style="color: #FF8000">// Mala práctica: llamar a una función en cada iteración
</span><span style="color: #007700">for(</span><span style="color: #0000BB">$i </span><span style="color: #007700">= </span><span style="color: #0000BB">0</span><span style="color: #007700">; </span><span style="color: #0000BB">$i </span><span style="color: #007700">&lt; </span><span style="color: #0000BB">getIterationCount</span><span style="color: #007700">(</span><span style="color: #0000BB">$people</span><span style="color: #007700">); ++</span><span style="color: #0000BB">$i</span><span style="color: #007700">) {
    </span><span style="color: #0000BB">$people</span><span style="color: #007700">[</span><span style="color: #0000BB">$i</span><span style="color: #007700">] .= </span><span style="color: #DD0000">' es genial'</span><span style="color: #007700">;
}

</span><span style="color: #FF8000">// Buena práctica: almacenar el número en una variable
</span><span style="color: #007700">for(</span><span style="color: #0000BB">$i </span><span style="color: #007700">= </span><span style="color: #0000BB">0</span><span style="color: #007700">, </span><span style="color: #0000BB">$peopleCount </span><span style="color: #007700">= </span><span style="color: #0000BB">getIterationCount</span><span style="color: #007700">(</span><span style="color: #0000BB">$people</span><span style="color: #007700">); </span><span style="color: #0000BB">$i </span><span style="color: #007700">&lt; </span><span style="color: #0000BB">$peopleCount</span><span style="color: #007700">; ++</span><span style="color: #0000BB">$i</span><span style="color: #007700">) {
    </span><span style="color: #0000BB">$people</span><span style="color: #007700">[</span><span style="color: #0000BB">$i</span><span style="color: #007700">] .= </span><span style="color: #DD0000">' es genial'</span><span style="color: #007700">;
}</span></code></pre></div>
   </div>

  </div>
 </p>
 <p class="simpara">
  En el ejemplo anterior, la función se llama en cada iteración del primer
  bucle, aunque siempre devuelve el mismo valor. Almacenar ese valor en una
  variable, como hace el segundo bucle, llama a la función una sola vez. Tenga
  en cuenta que el número de iteraciones queda entonces fijado: si el array se
  modifica dentro del bucle, el valor almacenado ya no refleja su tamaño.
 </p>

 <blockquote class="note"><p><strong class="note">Nota</strong>: 
  <p class="simpara">
   El tamaño de un <span class="type"><a href="language.types.array.php" class="type array">array</a></span> se almacena junto con el array, lo que
   significa que llamar a la función nativa <span class="function"><a href="function.count.php" class="function">count()</a></span> no
   requiere contar los elementos y no provoca problemas de rendimiento. Esto no
   se aplica a <strong><code><a href="array.constants.php#constant.count-recursive">COUNT_RECURSIVE</a></code></strong>, que recorre todo el array.
   También hay que tener cuidado al usar <span class="function"><a href="function.count.php" class="function">count()</a></span> sobre
   objetos que implementan <span class="interfacename"><a href="class.countable.php" class="interfacename">Countable</a></span>, ya que
   tales llamadas pueden ser más costosas.
  </p>
 </p></blockquote>

 <blockquote class="note"><p><strong class="note">Nota</strong>: 
  <p class="simpara">
   El bucle <code class="literal">for</code> no es la forma recomendada de iterar sobre
   arrays. El bucle <a href="control-structures.foreach.php" class="link"><code class="literal">foreach</code></a> está diseñado específicamente para este propósito
   y suele ser más cómodo.
  </p>
 </p></blockquote>
</div><?php manual_footer($setup); ?>