Files
doc-fr/language/control-structures/for.xml
T
Yannick Torres 81b80ad931 sync with EN
git-svn-id: https://svn.php.net/repository/phpdoc/fr/trunk@272141 c90b9560-bf6c-de11-be94-00142212c4b1
2008-12-28 21:01:42 +00:00

188 lines
4.7 KiB
XML

<?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision: 1.1 $ -->
<!-- EN-Revision: 1.1 Maintainer: yannick Status: ready -->
<!-- Reviewed: no -->
<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>
<para>
Les boucles <literal>for</literal> sont les boucles les plus complexes en PHP.
Elles fonctionnent comme les boucles <literal>for</literal> du langage C.
La syntaxe des boucles <literal>for</literal> est la suivante :
<informalexample>
<programlisting>
<![CDATA[
for (expr1; expr2; expr3)
commandes
]]>
</programlisting>
</informalexample>
</para>
<simpara>
La première expression (<varname>expr1</varname>) est
évaluée (exécutée), quoi qu'il arrive au
début de la boucle.
</simpara>
<simpara>
Au début de chaque itération, l'expression
<varname>expr2</varname> est évaluée.
Si l'évaluation vaut &true;, la boucle
continue et l'instruction est exécutée. Si
l'évaluation vaut &false;,
l'exécution de la boucle s'arrête.
</simpara>
<simpara>
À la fin de chaque itération, l'expression
<varname>expr3</varname> est évaluée
(exécutée).
</simpara>
<simpara>
Les expressions peuvent éventuellement être
laissées vides ou peuvent contenir plusieurs expressions séparées par des virgules.
Dans <varname>expr2</varname>, toutes les expressions séparées par une virgule
sont évaluées mais le résultat est obtenu depuis la dernière partie.
Si l'expression <varname>expr2</varname>
est laissée vide, cela signifie que c'est une boucle infinie
(PHP considère implicitement qu'elle vaut &true;,
comme en C). Cela n'est pas vraiment très utile, à moins que vous
souhaitiez terminer votre boucle par l'instruction conditionnelle
<link linkend="control-structures.break"><literal>break</literal></link>.
</simpara>
<para>
Considérons les exemples suivants. Tous affichent les chiffres de
1 jusqu'à 10 :
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
/* exemple 1 */
for ($i = 1; $i <= 10; $i++) {
echo $i;
}
/* exemple 2 */
for ($i = 1; ; $i++) {
if ($i > 10) {
break;
}
echo $i;
}
/* exemple 3 */
$i = 1;
for (; ; ) {
if ($i > 10) {
break;
}
echo $i;
$i++;
}
/* exemple 4 */
for ($i = 1, $j = 0; $i <= 10; $j += $i, print $i, $i++);
?>
]]>
</programlisting>
</informalexample>
</para>
<simpara>
Bien évidemment, le premier exemple est le plus simple
de tous (ou peut être le quatrième), mais vous
pouvez aussi pensez qu'utiliser une expression vide dans une
boucle <literal>for</literal> peut être utile parfois.
</simpara>
<para>
PHP supporte aussi la syntaxe alternative suivante pour les boucles
<literal>for</literal> :
<informalexample>
<programlisting>
<![CDATA[
for (expr1; expr2; expr3):
commandes
...
endfor;
]]>
</programlisting>
</informalexample>
</para>
<simpara>
Beaucoup de personnes ont l'habitude d'itérer grâce à des tableaux, comme dans
l'exemple ci dessous.
</simpara>
<para>
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
/*
* Ceci est un tableau avec des données que nous voulons modifier
* au long de la boucle
*/
$people = Array(
Array('name' => 'Kalle', 'salt' => 856412),
Array('name' => 'Pierre', 'salt' => 215863)
);
for($i = 0; $i < sizeof($people); ++$i)
{
$people[$i]['salt'] = rand(000000, 999999);
}
?>
]]>
</programlisting>
</informalexample>
</para>
<simpara>
Le problème se situe dans le deuxième argument de l'expression for. Ce code
peut être lent parce qu'il doit caclculer la taille du tableau à chaque
itération. Etant donné que la taille ne change jamais, il peut facilement être
optimisé en utilisant une variable intermédiaire pour stocker la taille et en
l'utilisant dans la boucle à la place de sizeof. L'exemple ci-dessous illustre
ce cas :
</simpara>
<para>
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
$people = Array(
Array('name' => 'Kalle', 'salt' => 856412),
Array('name' => 'Pierre', 'salt' => 215863)
);
for($i = 0, $size = sizeof($people); $i < $size; ++$i)
{
$people[$i]['salt'] = 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:"../../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
-->