mirror of
https://github.com/macintoshplus/doc-fr.git
synced 2026-03-25 17:32:07 +01:00
316 lines
7.2 KiB
XML
316 lines
7.2 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!-- $Revision$ -->
|
|
<!-- EN-Revision: e49940b757b35b8ef26bb64380c231eda7b49fc4 Maintainer: jpauli Status: ready -->
|
|
<!-- Reviewed: yes -->
|
|
|
|
<sect1 xml:id="control-structures.foreach" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
<title>foreach</title>
|
|
<?phpdoc print-version-for="foreach"?>
|
|
<para>
|
|
La structure de langage <literal>foreach</literal> fournit une façon simple de
|
|
parcourir des tableaux. <literal>foreach</literal> ne fonctionne que pour les tableaux
|
|
et les objets, et émettra une erreur si vous tentez de l'utiliser sur une
|
|
variable de type différent ou une variable non initialisée. Il existe
|
|
deux syntaxes :
|
|
<informalexample>
|
|
<programlisting>
|
|
<![CDATA[
|
|
foreach (iterable_expression as $value){
|
|
//commandes
|
|
}
|
|
foreach (iterable_expression as $key => $value){
|
|
//commandes
|
|
}
|
|
]]>
|
|
</programlisting>
|
|
</informalexample>
|
|
</para>
|
|
<simpara>
|
|
La première forme passe en revue le tableau
|
|
<literal>iterable_expression</literal>. À chaque itération, la valeur de
|
|
l'élément courant est assignée à <literal>$value</literal>.
|
|
</simpara>
|
|
<simpara>
|
|
La seconde forme assignera en plus la clé de l'élément courant
|
|
à la variable <literal>$key</literal> à chaque itération.
|
|
</simpara>
|
|
<simpara>
|
|
Il est à noter que <literal>foreach</literal> ne modifie pas le pointeur
|
|
interne du tableau, qui est utilisé par les fonctions tel que
|
|
<function>current</function> et <function>key</function>.
|
|
</simpara>
|
|
<simpara>
|
|
Il est possible de personnaliser
|
|
<link linkend="language.oop5.iterations">l'itération sur des objets</link>.
|
|
</simpara>
|
|
|
|
<para>
|
|
Vous pouvez modifier facilement les éléments d'un tableau en
|
|
précédent <literal>$value</literal> d'un &. Ceci assignera une
|
|
<link linkend="language.references">référence</link> au lieu de copier la
|
|
valeur.
|
|
<informalexample>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
$arr = array(1, 2, 3, 4);
|
|
foreach ($arr as &$value) {
|
|
$value = $value * 2;
|
|
}
|
|
// $arr vaut maintenant array(2, 4, 6, 8)
|
|
unset($value); // Détruit la référence sur le dernier élément
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</informalexample>
|
|
</para>
|
|
<warning>
|
|
<para>
|
|
La référence de <literal>$value</literal> et le dernier élément du tableau
|
|
sont conservés après l'exécution de la boucle <literal>foreach</literal>.
|
|
Il est recommandé de les détruire en utilisant la fonction
|
|
<function>unset</function>. Sinon, vous ressentirez le
|
|
comportement suivant :
|
|
</para>
|
|
<informalexample>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
$arr = array(1, 2, 3, 4);
|
|
foreach ($arr as &$value) {
|
|
$value = $value * 2;
|
|
}
|
|
// $arr est maintenant array(2, 4, 6, 8)
|
|
|
|
// sans un unset($value), $value est toujours une référence au dernier élément: $arr[3]
|
|
|
|
foreach ($arr as $key => $value) {
|
|
// $arr[3] sera mis à jour avec chaque valeur de $arr...
|
|
echo "{$key} => {$value} ";
|
|
print_r($arr);
|
|
}
|
|
// ...jusqu'à ce que finalement la valeur de deuxième à dernière soit copiée sur la dernière valeur
|
|
|
|
// sortie :
|
|
// 0 => 2 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 2 )
|
|
// 1 => 4 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 4 )
|
|
// 2 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 6 )
|
|
// 3 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 6 )
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</informalexample>
|
|
</warning>
|
|
<para>
|
|
Il est possible d'itérer la valeur d'un tableau constant par référence :
|
|
<informalexample>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
foreach (array(1, 2, 3, 4) as &$value) {
|
|
$value = $value * 2;
|
|
}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</informalexample>
|
|
</para>
|
|
<para>
|
|
<note>
|
|
<para>
|
|
<literal>foreach</literal> ne supporte pas la suppression des messages
|
|
d'erreur utilisant
|
|
<literal linkend="language.operators.errorcontrol">@</literal>.
|
|
</para>
|
|
</note>
|
|
</para>
|
|
<para>
|
|
Voici quelques exemples de plus :
|
|
<informalexample>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/* exemple foreach 1 : la valeur seulement */
|
|
|
|
$a = array(1, 2, 3, 17);
|
|
|
|
foreach ($a as $v) {
|
|
echo "Valeur courante de \$a: $v.\n";
|
|
}
|
|
|
|
/* exemple foreach 2 : la valeur et sa clé d'index */
|
|
|
|
$a = array(1, 2, 3, 17);
|
|
|
|
$i = 0; /* uniquement pour l'illustration */
|
|
|
|
foreach ($a as $v) {
|
|
echo "\$a[$i] => $v.\n";
|
|
$i++;
|
|
}
|
|
|
|
/* exemple foreach 3 : la clé et la valeur */
|
|
|
|
$a = array(
|
|
"un" => 1,
|
|
"deux" => 2,
|
|
"trois" => 3,
|
|
"dix-sept" => 17
|
|
);
|
|
|
|
foreach ($a as $k => $v) {
|
|
echo "\$a[$k] => $v.\n";
|
|
}
|
|
|
|
/* exemple foreach 4 : tableaux multidimensionnels */
|
|
$a = array();
|
|
$a[0][0] = "a";
|
|
$a[0][1] = "b";
|
|
$a[1][0] = "y";
|
|
$a[1][1] = "z";
|
|
|
|
foreach ($a as $v1) {
|
|
foreach ($v1 as $v2) {
|
|
echo "$v2\n";
|
|
}
|
|
}
|
|
|
|
/* exemple foreach 5 : tableaux dynamiques */
|
|
|
|
foreach (array(1, 2, 3, 4, 5) as $v) {
|
|
echo "$v\n";
|
|
}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</informalexample>
|
|
</para>
|
|
|
|
<sect2 xml:id="control-structures.foreach.list">
|
|
<title>Extraction des tableaux internes avec list()</title>
|
|
<?phpdoc print-version-for="foreach.list"?>
|
|
|
|
<para>
|
|
Il est possible d'itérer dans un tableau de tableaux,
|
|
et d'en extraire les tableaux internes dans des variables, en fournissant
|
|
une liste <function>list</function> comme valeur.
|
|
</para>
|
|
|
|
<para>
|
|
Par exemple :
|
|
|
|
<informalexample>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
$array = [
|
|
[1, 2],
|
|
[3, 4],
|
|
];
|
|
|
|
foreach ($array as list($a, $b)) {
|
|
// $a contient le premier élément du tableau interne,
|
|
// et $b contient le second élément.
|
|
echo "A: $a; B: $b\n";
|
|
}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
&example.outputs;
|
|
<screen>
|
|
<![CDATA[
|
|
A: 1; B: 2
|
|
A: 3; B: 4
|
|
]]>
|
|
</screen>
|
|
</informalexample>
|
|
</para>
|
|
|
|
<para>
|
|
Vous pouvez fournir moins d'éléments dans la fonction
|
|
<function>list</function> qu'il n'y en a dans le tableau interne,
|
|
auquel cas, les valeurs du tableau les plus à droite seront ignorées :
|
|
|
|
<informalexample>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
$array = [
|
|
[1, 2],
|
|
[3, 4],
|
|
];
|
|
|
|
foreach ($array as list($a)) {
|
|
// Notez qu'il n'y a pas de $b ici.
|
|
echo "$a\n";
|
|
}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
&example.outputs;
|
|
<screen>
|
|
<![CDATA[
|
|
1
|
|
3
|
|
]]>
|
|
</screen>
|
|
</informalexample>
|
|
</para>
|
|
|
|
<para>
|
|
Une notification sera générée s'il n'y a pas assez d'éléments dans le tableau
|
|
pour remplir la fonction <function>list</function> :
|
|
|
|
<informalexample>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
$array = [
|
|
[1, 2],
|
|
[3, 4],
|
|
];
|
|
|
|
foreach ($array as list($a, $b, $c)) {
|
|
echo "A: $a; B: $b; C: $c\n";
|
|
}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
&example.outputs;
|
|
<screen>
|
|
<![CDATA[
|
|
|
|
Notice: Undefined offset: 2 in example.php on line 7
|
|
A: 1; B: 2; C:
|
|
|
|
Notice: Undefined offset: 2 in example.php on line 7
|
|
A: 3; B: 4; C:
|
|
]]>
|
|
</screen>
|
|
</informalexample>
|
|
</para>
|
|
</sect2>
|
|
|
|
</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
|
|
-->
|