Previous Up Next
Université Lille 3-Charles de GaulleUFR de Mathématiques Sciences Économiques et Sociales

Chapitre 17  Les tableaux

Le stockage et la manipulation d'un grand nombre de données nécessitent souvent l'utilisation de tableaux.

17.1  Qu'est-ce qu'un tableau ?

Pour simplifier, voici 3 définitions équivalentes : D'une manière plus générale : Attention : en PHP la numérotation des éléments d'un tableau commence toujours à zéro.

17.2  Quelques exemples d'utilisation

17.2.1  Remplir et afficher le contenu un tableau

On peut remplir, par exemple, les cases d'un tableau une par une :
     $t[0]="bonjour";
     $t[1]="bonsoir";
     $t[2]="bla bla bla";
On peut aussi utiliser une boucle for pour remplir une série de cases :
     for ($i=3 ; $i<8 ; $i++) {
       $t[$i]=$i*5;
     }
Pour ce qui de l'affichage, on est obligé de passer aussi par les cases une par une : l'utilisation de « echo $t; » ne permet pas d'afficher le contenu du tableau.
     echo "case numéro 2 : ".$t[2]."<BR>\n";
     for ($i=2 ; $i<6 ; $i++) {
       echo "case numéro $i : ".$t[$i]."<BR>\n";
     }

17.2.2  Un exemple complet

En regroupant les lignes précédentes (et en les habillant un peu) on obtient le programme suivant :
http://www.grappa.univ-lille3.fr/polys/reseaux-DG/exemples/tableau-01.php
<HTML><BODY>

<H2>Remplissage du tableau</H2>

(Il ne se passe rien à l'écran dans cette partie&nbsp;: 
normal, c'est du travail sur la modification des variables, 
par sur leur affichage.)

<?php
$t[0]="bonjour";
$t[1]="bonsoir";
$t[2]="bla bla bla";
for ($i=3 ; $i<8 ; $i++) {
  $t[$i]=$i*5;
}
?>

<H2>Affichage de certaines cases particulières</H2>

<?php
echo "case numéro 2 : ".$t[2]."<BR>\n"
    ."case numéro 5 : ".$t[5]."<BR>\n";
?>

<H2>Affichage d'une suite de cases</H2>

<?php
for ($i=2 ; $i<6 ; $i++) {
  echo "case numéro $i : ".$t[$i]."<BR>\n";
}
?>
</BODY></HTML>

17.2.3  Un exemple moins élémentaire

Il existe d'autres façons de remplir un tableau.

Commencez par trouver l'aide sur la fonction « explode » (c'est une fonction de manipulation de chaînes de caractères) et sur la fonction « count » (c'est une fonction de manipulation de tableaux).

Testez ensuite ce programme :
http://www.grappa.univ-lille3.fr/polys/reseaux-DG/exemples/tableau-02.php
<HTML><BODY>
<FORM ACTION="tableau-02.php">
<INPUT SIZE="60" NAME="saisie">
<INPUT TYPE="submit" VALUE="Traiter">
</FORM>
<HR>
Les mots de la chaîne tapée sont&nbsp;:
<UL>
<?php
$mots = explode(" ",$saisie);
for ($i=0; $i<count($mots); $i++) {
  echo "<LI>".$mots[$i];
}
?>
</UL></BODY></HTML>

17.2.4  Et avec des fichiers ?

On a un fichier de données : http://www.grappa.univ-lille3.fr/polys/reseaux-DG/exemples/tableau-03.txt il contient les informations suivantes :
Thor;Aipaleur;12 Rue Yves Atrovite;59118;Wambrechies
Helmut;Ardalpic;25 Avenue Yann Akpourlui;29000;Quimper
Jacques-André;Lejouré-Lanuit;5 Boulevard Agathe Zepower;92230;Gennevilliers
Gédéon;Teuzmany;123 Rue Alphonse Danltas;59650;Villeneuve d'Ascq
Hakim;Ainerve;2 Rue Yvon Anchier;59830;Cysoing
Thérèse;Ultasonnul;99 Avenue Sophie Fonfec;13000;Marseille
Il s'agit de renseignements portant sur une liste de personnes. Chaque ligne est sous la forme « prénom ; nom ; adresse ; code postal ; ville » (séparés par des points-virgules).

Commencez par trouver l'aide sur la fonction « file » (c'est une fonction de manipulation de fichiers).

Le programme suivant va lire le fichier et afficher de manière propre son contenu :
http://www.grappa.univ-lille3.fr/polys/reseaux-DG/exemples/tableau-03.php
<HTML><BODY><OL>
<?php
// lecture du fichier et stockage dans un tableau
// (chaque ligne du fichier est dans une case du tableau)
$lignes = file("tableau-03.txt");
// traitement de chaque ligne 
for ($i=0; $i<count($lignes); $i++) {
  // éclatement en éléments distincts
  $personne=explode(";",$lignes[$i]);
  // affichage "propre" des renseignements
  echo "<LI>".$personne[0]." ".strtoupper($personne[1])."<BR>"
    .$personne[2]."<BR>".$personne[3]." ".$personne[4];
}
?>
</OL></BODY></HTML>

17.3  Les tableaux associatifs

Il s'agit d'une généralisation des tableaux, mais au lieu d'utiliser des nombres pour les indices on peut utiliser n'importe quoi...

On peut avoir ainsi une variante de l'exemple précédent. Ce programme (tableau-04.php) permet de choisir un prénom dans une liste déroulante et d'afficher les renseignements correspondants.
http://www.grappa.univ-lille3.fr/polys/reseaux-DG/exemples/tableau-04.php
<HTML><BODY>
<FORM ACTION="tableau-04.php">
<SELECT NAME="prenom">
   <OPTION VALUE="Thècle">Thècle
   <OPTION VALUE="Édith">Édith
   <OPTION VALUE="Kelly">Kelly
   <OPTION VALUE="Mélusine">Mélusine
   <OPTION VALUE="Elmer">Elmer
</SELECT>
<INPUT TYPE="submit" VALUE="renseignements">
</FORM>
<?php
$nom["Thècle"]="Assicmonpote";
$nom["Édith"]="Avuleur";
$nom["Kelly"]="Diocy";
$nom["Mélusine"]="Enfaillite";
$nom["Elmer"]="Hitmieux";
$adresse["Thècle"]="123 rue Alex KUZBIDON";
$adresse["Édith"]="951 rue Ondine OUCESOIR";
$adresse["Kelly"]="5 boulevard Rosa REMECITOYENS";
$adresse["Mélusine"]="7 rue Jean TANLAMER";
$adresse["Elmer"]="99 avenu Dino ZORE";
$ville["Thècle"]="Rennes";
$ville["Édith"]="Douarnenez";
$ville["Kelly"]="Auchel";
$ville["Mélusine"]="Chamonix";
$ville["Elmer"]="Langres";

if (isset($prenom)) {
  echo "Prénom : $prenom<BR>\nNom : ".$nom[$prenom]
    ."<BR>\nAdresse : ".$adresse[$prenom]
    ."<BR>\nVille : ".$ville[$prenom];
}
?>
</BODY></HTML>

17.4  Parcours d'un tableau associatif

Quand on travaille avec un tableau classique (à indice numérique), il est facile d'en parcourir toutes les cases avec une boucle for.

Mais pour parcourir un tableau associatif, c'est un peu moins direct. La méthode classique ne marche pas : la fonction count ne donne pas un résultat exploitable facilement dans le cas d'un tableau associatif. Il est alors difficile d'imaginer, par exemple pour l'exemple précédent, une boucle qui construirait automatiquement la suite « Thècle, Édith, Kelly, Mélusine, Elmer ».

Ces valeurs, il faut aller les chercher dans le tableau lui-même.

Ne nous énervons pas, PHP fournit tout ce qu'il faut. Commencez par trouver l'aide sur les fonctions « reset », « each » et « list » (ce sont des fonctions de manipulation de tableaux).

Étudiez ensuite le programme suivant.
http://www.grappa.univ-lille3.fr/polys/reseaux-DG/exemples/tableau-05.php
<HTML><BODY><TABLE BORDER>
<?php
$nom["Thècle"]="Assicmonpote";
$nom["Édith"]="Avuleur";
$nom["Kelly"]="Diocy";
$nom["Mélusine"]="Enfaillite";
$nom["Elmer"]="Hitmieux";
reset($nom);
while (list($clef,$valeur)=each($nom)) {
  echo "<TR><TD>$clef</TD><TD>$valeur</TD></TR>\n";
}
?>
</TABLE></BODY></HTML>
Ce programme parcourt le tableau $nom, et en affiche le contenu, chaque ligne d'affichage contenant le couple clef-valeur (la clef correspondant à ce qu'on a l'habitude d'appeler indice quand il s'agit d'un nombre).

17.5  Exercices

  1. On dispose du fichier suivant contenant des adresses web (rien en vous empêche d'en choisir d'autres).

    Écrire un programme qui lit ce fichier pour construire une page web contenant une liste de liens hypertextes.

    http://www.grappa.univ-lille3.fr/polys/reseaux-DG/exemples/tableau-06.txt
    http://www.hoaxbuster.com/
    http://www.gazel.nu/faqs/virus.htm#e-mail
    http://www.electriccafe.org/JBT/
    http://www.zetetique.ldh.org/
    http://perso.wanadoo.fr/jean.brissonnet/
    http://www.thejackytouch.com/
    http://www.multimania.com/lepoulpe
    
    http://www.grappa.univ-lille3.fr/polys/reseaux-DG/exemples/tableau-06.php
  2. Même exercice, mais cette fois chaque ligne comprend aussi une description du site pointé (la séparation étant assuré par la chaîne « "**" ») : http://www.grappa.univ-lille3.fr/polys/reseaux-DG/exemples/tableau-07.txt
    http://www.hoaxbuster.com/**HoaxBuster, première....
    http://www.gazel.nu/faqs/virus.htm#e-mail**Est-il....
    http://www.electriccafe.org/JBT/**Nemo Joe Bar Team Spirit
    http://www.zetetique.ldh.org/**Le cercle Zététique
    http://perso.wanadoo.fr/jean.brissonnet/**Éthique et toc
    http://www.thejackytouch.com/**The Jacky Touch
    http://www.multimania.com/lepoulpe**Le poulpe sur la toile
    
    Ce qui donne ça : http://www.grappa.univ-lille3.fr/polys/reseaux-DG/exemples/tableau-07.php
  3. Même exercice, mais cette fois chaque description et l'adresse correspondante sont sur deux lignes consécutives : http://www.grappa.univ-lille3.fr/polys/reseaux-DG/exemples/tableau-08.txt
    HoaxBuster, première ressource francophone sur les hoax
    http://www.hoaxbuster.com/
    Est-il possible d'attraper un virus en ouvrant un e-mail?
    http://www.gazel.nu/faqs/virus.htm#e-mail
    Nemo Joe Bar Team Spirit
    http://www.electriccafe.org/JBT/
    Le cercle Zététique
    http://www.zetetique.ldh.org/
    Éthique et toc
    http://perso.wanadoo.fr/jean.brissonnet/
    The Jacky Touch
    http://www.thejackytouch.com/
    Le poulpe sur la toile
    http://www.multimania.com/lepoulpe
    
    Ce qui donne ça : http://www.grappa.univ-lille3.fr/polys/reseaux-DG/exemples/tableau-08.php
  4. On donne une liste de personnes dans le fichier http://www.grappa.univ-lille3.fr/polys/reseaux-DG/exemples/tableau-09.txt dont voici les premières lignes :
    19;Thor;Aipaleur;tata
    30;Dick;Sionnaire;dsds
    35;Debbie;Zoudanlkou;dzdz
    47;Mélanie;Zaitofrai;mzmz
    48;Helmut;Ardelpic;haha
    49;Jacques-André;Lejouré-Lanuit;jljl
    68;Phil;Alapate;papa
    
    Chaque ligne est composée, dans l'ordre, d'un identifiant (un nombre), un prénom, un nom, et un mot de passe. Écrire une page web qui donne à sélectionner une des personnes et qui affiche ensuite son mot de passe.
    http://www.grappa.univ-lille3.fr/polys/reseaux-DG/exemples/tableau-09.php
D.Gonzalez (gonzalez@univ-lille3.fr) en date du th , 

Previous Up Next