1
0
mirror of https://github.com/php/doc-es.git synced 2026-03-26 00:12:06 +01:00
Files
archived-doc-es/language/control-structures/for.xml
Pedro Antonio Gil Rodríguez 4d083af4c3 Correcciones menores
git-svn-id: https://svn.php.net/repository/phpdoc/es/trunk@333835 c90b9560-bf6c-de11-be94-00142212c4b1
2014-06-19 11:18:47 +00:00

186 lines
4.6 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 2c3698ad6f5bd147301df8c49a3dda2dad9b04a6 Maintainer: jpberdejo Status: ready -->
<!-- Reviewed: yes Maintainer: seros -->
<sect1 xml:id="control-structures.for" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title><literal>for</literal></title>
<?phpdoc print-version-for="for"?>
<para>
Los bucles <literal>for</literal> son los más complejos en PHP.
Se comportan como sus homólogos en C. La sintaxis de un bucle
<literal>for</literal> es:
<informalexample>
<programlisting>
<![CDATA[
for (expr1; expr2; expr3)
sentencia
]]>
</programlisting>
</informalexample>
</para>
<simpara>
La primera expresión (<varname>expr1</varname>) es
evaluada (ejecutada) una vez incondicionalmente al comienzo del
bucle.
</simpara>
<simpara>
En el comienzo de cada iteración,
se evalúa <varname>expr2</varname>. Si se evalúa como
&true;, el bucle continúa y se ejecutan la/sy
sentencia/s anidada/s. Si se evalúa como
&false;, finaliza la ejecución del bucle.
</simpara>
<simpara>
Al final de cada iteración, se evalúa (ejecuta)
<varname>expr3</varname>.
</simpara>
<simpara>
Cada una de las expresiones puede estar vacía o contener múltiples
expresiones separadas por comas. En <varname>expr2</varname>, todas
las expresiones separadas por una coma son evaluadas, pero el resultado se toma
de la última parte.
Que <varname>expr2</varname> esté vacía significa que el bucle debería
ser corrido indefinidamente (PHP implícitamente lo considera como
&true;, como en C). Esto puede no ser tan inútil como se
pudiera pensar, ya que muchas veces se debe terminar el bucle usando
una sentencia condicional <link
linkend="control-structures.break"><literal>break</literal></link>
en lugar de utilizar la expresión verdadera del
<literal>for</literal>.
</simpara>
<para>
Considere los siguientes ejemplos. Todos ellos muestran los números
del 1 al 10:
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
/* ejemplo 1 */
for ($i = 1; $i <= 10; $i++) {
echo $i;
}
/* ejemplo 2 */
for ($i = 1; ; $i++) {
if ($i > 10) {
break;
}
echo $i;
}
/* ejemplo 3 */
$i = 1;
for (; ; ) {
if ($i > 10) {
break;
}
echo $i;
$i++;
}
/* ejemplo 4 */
for ($i = 1, $j = 0; $i <= 10; $j += $i, print $i, $i++);
?>
]]>
</programlisting>
</informalexample>
</para>
<simpara>
Por supuesto, el primer ejemplo parece ser el mejor (o
quizás el cuarto), pero se puede observar que la posibilidad de usar expresiones
vacías en los bucles <literal>for</literal> resulta útil en muchas
ocasiones.
</simpara>
<para>
PHP también admite la sintaxis alternativa de los dos puntos para
bucles <literal>for</literal>.
<informalexample>
<programlisting>
<![CDATA[
for (expr1; expr2; expr3):
sentencia
...
endfor;
]]>
</programlisting>
</informalexample>
</para>
<simpara>
Es una cosa común a muchos usuarios iterar por medio de arrays como en el
siguiente ejemplo.
</simpara>
<para>
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
/*
* Este es un array con algunos datos que se quieren modificar
* cuando se recorra el bucle for.
*/
$people = array(
array('name' => 'Kalle', 'salt' => 856412),
array('name' => 'Pierre', 'salt' => 215863)
);
for($i = 0; $i < count($people); ++$i) {
$people[$i]['salt'] = mt_rand(000000, 999999);
}
?>
]]>
</programlisting>
</informalexample>
</para>
<simpara>
El código anterior puede ser lento, debido a que el tamaño del array se capta en
cada iteración. Dado que el tamaño nunca cambia, el bucle puede ser fácilmente
optimizado mediante el uso de una variable intermedia para almacenar el tamaño en lugar
de llamar repetidamente a <function>count</function>:
</simpara>
<para>
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
$people = array(
array('name' => 'Kalle', 'salt' => 856412),
array('name' => 'Pierre', 'salt' => 215863)
);
for($i = 0, $size = count($people); $i < $size; ++$i) {
$people[$i]['salt'] = mt_rand(000000, 999999);
}
?>
]]>
</programlisting>
</informalexample>
</para>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->