Créée le, 19/06/2015

 Mise à jour le, 12/05/2019

Visiteurs N°  




Accueil
Nouveau Blog Nouveautés Moteur de Recherche Votre Caddie Pour Vos Achats Votre Espace Membre Vos Signets et Vos Jeux Préférés Page de Bienvenue Statique Site en Français Site en Anglais
Sommaires
Électronique Fondamentale Technologie Fondamentale Testez vos Connaissances Électronique Théorique Digitale Électronique Pratique Digitale Lexique Électronique Numérique Data book TTL Data book CMOS Dépannage TVC Mathématique
Micro-ordinateurs
Théorique des Micro-ordinateurs Testez vos Connaissances Pratique des Micro-ordinateurs Glossaires sur les Ordinateurs
Physique
La lumière Champ d'action Rayonnement Électromagnétique
Technologies
Classification des Résistances Identification des Résistances Classification des Condensateurs Identification des Condensateurs
Formulaires Mathématiques
Géométrie Physique 1. - Électronique 1. 2. - Électronique 1. 3. - Électrotechnique 1. 4. - Électromagnétisme
Accès à tous nos Produits
E. T. F. - Tome I - 257 Pages E. T. F. - Tome II - 451 Pages E. T. F. - Tome III - 611 Pages E. T. D. - Tome I - 610 Pages N. B. M. - Tome I - 201 Pages E. T. M. - Tome I - 554 Pages Business à Domicile Ouvrages 34 pages gratuits Nos E-books Logiciel Géométrie Logiciel Composants Électroniques
Aperçu de tous nos Produits
E. T. F. - Tome I - 257 Pages E. T. F. - Tome II - 451 Pages E. T. F. - Tome III - 611 Pages E. T. D. - Tome I - 610 Pages E. T. M. - Tome I - 554 Pages Logiciel Géométrie Logiciel Composants Électroniques
Nos Leçons aux Formats PDF
Électronique Fondamentale Technologie Fondamentale Électronique Théorique Digitale Électronique Pratique Digitale Théorique des Micro-ordinateurs Mathématiques
Informatique
Dépannage Win98 et WinXP et autres Dépannage PC Glossaire HTML et Programmes PHP et Programmes JavaScript (en cours de travaux) Création de plusieurs Sites
Forums
Forum Électronique et Infos Forum Électronique et Poésie
Divers et autres
Formulaire des pages perso News XML Statistiques CountUs Éditeur JavaScript Nos Partenaires et nos Liens Utiles Gestionnaire de Partenariat Nos Partenaires MyCircle Sondages 1er Livre d'Or 2ème livre d'Or

Signets :
  Leçons suivantes        Leçons précédentes     Bas de page
  Cliquez ici pour la leçon suivante ou dans le sommaire prévu à cet effet


Utilisation de tableaux, Tableaux indexés numériquement, Tableaux associatifs, Tableaux multidimensionnels, etc. (1ère partie) :



Utilisation de tableaux :

Cette nouvelle leçon montre comment utiliser une construction de programmation importante : les tableaux. Les variables examinées dans les leçons précédentes étaient de nature scalaire, c'est-à-dire qu'elles stockaient chacune une seule valeur. Un tableau est une variable stockant un ensemble ou une série de valeurs. Un même tableau peut comprendre de nombreux éléments. Chaque élément peut lui-même se constituer d'une valeur unique, telle qu'un texte ou un nombre, ou d'un autre tableau. Un tableau comprenant d'autres tableaux est dit "multidimensionnel".

Le langage PHP supporte les tableaux indexés numériquement et les tableaux associatifs. Les tableaux indexés numériquement devraient vous être familiers si vous avez déjà utilisé un langage de programmation. Par contre, à moins que vous n'ayez déjà pratiqué la programmation PHP ou Perl, vous n'avez probablement jamais encore eu recours à des tableaux associatifs. Les tableaux associatifs permettent d'utiliser des valeurs plus utiles pour l'index, par exemple des mots ou d'autres informations significatives.

Dans cette leçon, nous poursuivrons la construction de l'application modèle de chez Jean-Pierre commencée dans les leçons précédentes, en nous servant de tableaux pour faciliter la manipulation des informations répétitives telles que les commandes client. L'usage de tableaux nous permettra d'écrire un code plus dense pour certaines des opérations déjà implémentées dans les deux premières leçons.

Qu'est-ce qu'un tableau ?

Dans la première leçon, nous avons étudié les variables scalaires à l'exemple 3, en cliquant ici. Une variable scalaire est un emplacement de la mémoire désigné par un nom, et dans lequel peut être stockée une valeur. De la même manière, un tableau est un emplacement de la mémoire désigné par un nom, et dans lequel peut être stocké un ensemble de valeurs. Un tableau permet par conséquent de regrouper des valeurs scalaires.

Dans l'application modèle des composants électroniques de chez Jean-Pierre, dont nous avons commencé l'élaboration, nous utiliserons un tableau pour stocker la liste des articles de chez Jean-Pierre. La figure 1 montre une liste de trois articles regroupés dans un tableau. La variable $Produits est utilisée pour stocker ce tableau (nous verrons un peu plus loin comment créer une telle variable).

Articles_Vendus_par_Jean_Pierre.PNG

Dès lors que des informations sont stockées dans un tableau, elles peuvent être soumises à diverses manipulations très utiles. En mettant en oeuvre des boucles telles que celles décrites à la première leçon (en cliquant ici), vous pouvez vous simplifier la tâche en effectuant les mêmes actions sur chacune des valeurs d'un tableau. L'ensemble des informations enregistrées dans un tableau peut être manipulé comme s'il s'agissait d'une seule entité. Ainsi, avec une simple ligne de code, toutes les valeurs contenues dans un tableau peuvent être passées à une fonction. Par exemple, pour trier les articles de chez Jean-Pierre par ordre alphabétique, il nous suffira de passer le tableau les contenant à la fonction PHP sort().

Les valeurs stockées dans un tableau constituent les "éléments" du tableau. A chaque élément d'un tableau est associé un "index" (également appelé "clé") qui permet d'accéder à l'élément.

Dans la plupart des langages de programmation, les tableaux ont des index numériques qui commencent typiquement à 1 ou à 0. PHP supporte ce type de tableaux.

PHP supporte également les tableaux dits "associatifs", familiers aux programmeurs Perl. Les index des tableaux associatifs peuvent être construits à partir de presque tout type de données, mais sont typiquement construits à partir de chaînes.

Nous commencerons cette étude par les tableaux indexés numériquement.

Tableaux indexés numériquement :

Ce type de tableau est supporté par la grande majorité des langages de programmation. En PHP, les index commencent par défaut à zéro, mais cette valeur initiale peut être ajustée.

Initialisation de tableaux indexés numériquement :

Pour créer le tableau schématisé figure 1, vous devez utiliser la ligne de code suivante :

    $Produits = array ("Resistanses", "Condensateurs", "Transistors") ;

L'exécution de cette instruction conduit à la création d'un tableau appelé $Produits, et contenant les trois valeurs "Resistances", "Condensateurs", et "Transistors". Notez que tout comme echo, array() est une construction du langage plutôt qu'une fonction.

Selon le contenu à stocker dans un tableau, il n'est pas forcément nécessaire d'initialiser manuellement ce contenu comme cela est fait dans l'instruction précédente.

Si les données à placer dans un tableau sont déjà contenues dans un autre tableau, il suffit de copier un tableau dans l'autre au moyen de l'opérateur = (affectation).

Une série de nombres croissants peut être automatiquement stockée dans un tableau grâce à la fonction range(), qui se charge elle-même de créer le tableau requis. La ligne qui suit crée un tableau dénommé $Nombres, et dont les éléments sont les nombres entiers compris entre 1 et 10 :

    $Nombres = range (1, 10) ;

Lorsque des informations sont contenues dans un fichier stocké sur disque, le contenu du tableau peut être directement chargé à partir du fichier. Nous reviendrons sur ce point un peu plus loin dans cette leçon, dans la section "chargement de tableaux à partir de fichiers".

Lorsque des informations sont contenues dans une base de données, le contenu du tableau peut être directement chargé à partir de la base de données. Cette possibilité est traitée plus loin concernant les nouvelles leçons.

Le langage PHP offre également diverses fonctions permettant d'extraire des portions d'un tableau ou de réorganiser le contenu des tableaux. Certaines de ces fonctions seront décrites plus loin de cette leçon.

Accès au contenu des tableaux :

L'accès au contenu d'un tableau implique de spécifier le nom du tableau. Pour accèder au contenu d'une variable de type tableau, vous devez utiliser le nom de la variable, ainsi qu'une clé (ou un index). La clé indique les valeurs stockées auxquelles vous voulez accéder. La clé doit être spécifiée entre crochets, juste après le nom de la variable.

Par exemple, tapez $Produits[0], $Produits[1], et $Produits[2] pour accéder au contenu du tableau $Produits.

L'élément zéro est le premier élément du tableau. Le principe de numérotation du langage PHP est identique à celui de nombreux autres langages de programmation tels que le C, le C++, ou Java. Si toutefois, vous ne connaissez aucun de ces langages, il vous faudra peut-être un peu de temps pour vous familiariser.

Tout comme pour les autres variables, la modification du contenu des éléments d'un tableau s'effectue au moyen de l'opérateur =. La ligne de code qui suit remplace le premier élément du tableau $Produits, "Resistances", par l'élément "Fusibles" :

    $Produits[0] = "Fusibles" ;

L'instruction qui suit pourrait être utilisée pour ajouter un nouvel élément, "Fusibles", à la fin du tableau, conduisant ainsi à un tableau $Produits formé de quatre éléments :

    $Produits[3] = "Fusibles" ;

Pour afficher le contenu du tableau $Produits, nous pourrions utiliser la ligne de code suivante :

    echo "$Produits[0] $Produits[1] $Produits[2] $Produits[3]" ;

Tout comme les autres variables PHP, les tableaux ne nécessitent pas une initialisation ou une création préalables. Ils sont automatiquement créés à leur première utilisation.

Le code qui suit conduit à la création du même tableau $Produits que celui déjà cité :

    $Produits[0] = "Resistances" ;

    $Produits[1] = "Condensateurs" ;

    $Produits[2] = "Transistors" ;

Si le tableau $Produits n'existe pas encore, la première ligne crée un nouveau tableau formé d'un élément. Les lignes qui suivent, ajoutent des valeurs au tableau qui vient dêtre créé.

Utilisation de boucles pour accéder au contenu d'un tableau :

Lorsqu'un tableau est indexé par une série de nombres, une boucle for peut être mise en oeuvre pour afficher plus facilement le contenu du tableau.

    for ($i = 0; $i <3; $i++)

    echo "$Produits[$i]" ;

<HTML>

     <HEAD>

                    <TITLE> Boucles pour acc&eacute;der au contenu d'un tableau </TITLE>

     </HEAD>

              <BODY>

     <?php

     echo "<BR/> <BR/> <CENTER>" ;

     $Produits[0] = "&nbsp;&nbsp;&nbsp;&nbsp;<font face='Arial' size='3' color='#000000'>R&eacute;sistances </font> <BR/>" ;

     $Produits[1] = "&nbsp;&nbsp;&nbsp;&nbsp;<font face='Arial' size='3' color='#000000'>Condensateurs </font> <BR/>" ;

     $Produits[2] = "&nbsp;&nbsp;&nbsp;&nbsp;<font face='Arial' size='3' color='#000000'>Transistors </font> <BR/> </CENTER>" ;

     for ($i = 0 ; $i < 3 ; $i++)

     echo "$Produits[$i]" ;

     ?>

              </BODY>

</HTML>

Pour visualiser l'aperçu, en cliquant ici. [Exemple 1].

Dans cette boucle (de couleur verte foncée) produit un tableau identique à celui obtenu par exécution des trois dernières instructions de la section précédente, tout en étant plus compact. La possibilité d'utiliser ainsi une simple boucle pour accéder à chaque élément d'un tableau est une élégante particularité des tableaux indexés numériquement. Dans les tableaux associatifs, il n'est pas si facile de parcourir le contenu au moyen de boucles. Par contre, les tableaux associatifs ont l'avantage de permettre la constitution d'index significatifs.

Tableaux associatifs :

Dans le tableau $Produits, nous avons laissé à l'interpréteur PHP le soin d'indexer les éléments du tableau. C'est ainsi que le premier élément s'est vu associer la clé 0, le deuxième élément la clé 1, et ainsi de suite. PHP supporte également les tableaux associatifs, dans lesquels toute clé peut être associée à chaque valeur.

Initialisation d'un tableau associatif :

L'instruction qui suit conduit à la création d'un tableau associatif dont les noms des articles sont les clés et dont les prix sont les valeurs :

    $Prix = array( "Resistances" =>2, "Condensateurs" =>3, "Transistors =>5 ) ;

Accès aux éléments du tableau :

Là encore, l'accès au contenu du tableau s'effectue en spécifiant le nom de la variable et une clé. Ainsi, pour accéder au tableau créé par l'instruction de la section précédente, nous utiliserions les expressions $Prix ["Resistances"], $Prix ["Condensateurs"], et $Prix ["Transistors"].

Tout comme les tableaux indexés numériquement, les tableaux associatifs peuvent être créés et initialisés par un élément à la fois.

Les lignes de code qui suivent, conduisent à la création du même tableau $Prix que celui déjà créé. Au lieu toutefois de générer d'emblée un tableau formé de trois éléments, cette version crée tout d'abord un tableau comprenant un élément, puis lui ajoute deux éléments supplémentaires.

    $Prix = array( "Resistances" => 2 ) ;

    $Prix["Condensateurs"] = 3 ;

    $Prix["Transistors"] = 5 ;

Considérons à présent une autre variante de ce fragment de code, dont l'exécution produit un résultat identique. Ce code ne génère pas explicitement un tableau, mais conduit indirectement à la création d'un tableau lorsqu'un premier élément est ajouté à un tableau encore inexistant.

    $Prix["Resistances"] = 2 ;

    $Prix["Condensateurs"] = 3 ;

    $Prix["Transistors"] = 5 ;

Implémentation de boucles utilisant les fonctions each() et list() :

Parce que dans le tableau associatif généré précédemment, les clés ne sont pas des nombres, la manipulation du tableau ne peut s'effectuer en implémentant une boucle for avec un compteur simple. Le fragment de code qui suit, liste le contenu du tableau $Prix :

<HTML>

     <HEAD>

                    <TITLE> Boucles pour acc&eacute;der au contenu d'un tableau </TITLE>

     </HEAD>

              <BODY>

    <?PHP

    $Prix = array ("R&eacute;sistances" => 2 ) ;

    $Prix["Condensateurs"] = 3 ;

    $Prix["Transistors"] = 5 ;

    while( $Element = each($Prix))

    {

    echo "<BR/> <BR/>" ;

    echo "<font face='Arial' size='3' color='#005500'> <b> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" . $Element [ "key" ] ;

    echo "&nbsp; - &nbsp;" ;

    echo $Element[ "value" ] . "&nbsp; euros </font> </b>" ;

    }

    ?>

              </BODY>

</HTML>

L'exécution de ce code produit le résultat montré à la figure 2.

Fonction_each()_pour_Tableaux.png

Pour visualiser l'aperçu, en cliquant ici. [Exemple 2].

Dans la première leçon, nous avons étudié les boucles while et l'instruction echo. Le fragment de code précédent met en oeuvre la fonction each(), que nous rencontrons ici pour la première fois. Cette fonction renvoie l'élément courant dans un tableau, et déplace le pointeur du tableau sur l'élément suivant. Dans ce code, la fonction each() est invoquée au sein d'une boucle while, de sorte à renvoyer successivement les différents éléments contenus dans le tableau. L'exécution de la boucle prend fin lorsque l'interpréteur PHP atteint la fin du tableau.

Dans ce code, la variable $Element est un tableau. A l'appel de la fonction each(), la variable $Element contient un tableau formé de quatre valeurs et des quatre clés qui leur sont associées et qui désignent les différentes positions dans le tableau. La position définie par key et 0 contient l'élément courant, tandis que la position définie par value et 1 contient la valeur de l'élément courant. Dans ce cas, nous avons choisi d'utiliser les positions désignées par des noms, plutôt que les positions désignées par des numéros. Au final toutefois, ces deux choix sont équivalents.

Il existe une manière plus élégante et plus commune d'obtenir ce résultat, en utilisant la fonction list() pour scinder le tableau en un ensemble de valeurs. Nous pouvons ainsi séparer deux des valeurs renvoyées par la fonction each(), de la manière suivante :

    list ($Produits, $Prix) = each ($Prix) ;

Dans cette ligne de code, la fonction each() est utilisée pour prendre l'élément courant du tableau $Prix, le renvoyer sous forme de tableau, et pour déplacer le pointeur du tableau sur l'élément suivant. La fonction list() est d'autre part mise en oeuvre pour transfomer les éléments 0 et 1 du tableau renvoyé par la fonction each() en deux nouvelles variables appelées $Produits et $Prix.

Nous pouvons ensuite accéder à tout le contenu du tableau $Prix, et l'afficher dans la fenêtre du navigateur au moyen des deux lignes de code qui suivent :

    while (list($Produits, $Prix) = each ($Prix))

    echo "$Produits - $Prix <BR>" ;

L'exécution de ces lignes de code produit le même résultat que celui montré à la figure 2. Ces lignes apparaissent toutefois plus facile à lire, parce que la fonction list() permet d'affecter des noms aux variables.

A propos de la fonction each(), notez que le tableau conserve la "mémoire" de l'élément courant. Si vous devez utiliser deux fois le même tableau dans un script, vous devez par conséquent replacer le pointeur du tableau sur le début du tableau, au moyen de la fonction reset.() Ainsi, pour afficher une deuxième fois les prix des articles, il nous faudrait exécuter les lignes de code suivantes :

    reset($Prix) ;

    while (list($Produits, $Prix) = each ($Prix))

    echo "$Produits - $Prix <BR>" ;

Tableaux multidimensionnels :

Les tableaux ne sont pas nécessairement de simples listes de clés et de valeurs. Chaque position au sein d'un tableau peut contenir un autre tableau. Le tableau est alors dit "multidimensionnel". Ce type de tableau peut être comparé à une matrice, ou une grille, avec une largeur et une hauteur défnies, ou avec un nombre défini de lignes et de colonnes.

Par exemple, nous pouvons avoir recours à un tableau multidimensionnel pour stocker plusieurs informations relatives à chaque article vendu par le biais du site de chez Jean-Pierre.

La figure 3 schématise un tableau bidimensionnel stockant les données concernant les articles de chez Jean-Pierre, dans lequel chaque ligne représente un article individuel, et chaque colonne représente un attribut (ou un type d'information) des articles.

Tableau_Bidimensionnel.png

Dans le contexte d'un scriptage PHP, le code qui suit pourrait être utilisé pour générer le tableau montré à la figure 3 :

    $Produits = array( array( "Resis", "Resistances", 2) ,

                       array( "Condos", "Condensateurs", 3) ,

                       array( "Transis", "Transistors", 5)) ;

Ces lignes font bien apparaître que le tableau $Produits créé se comporte de trois autres tableaux.

Souvenez-vous que pour accéder à un élément d'un tableau unidimensionnel, il faut spécifier le nom du tableau et la clé de l'élément. Dans un tableau bidimensionnel, l'accès s'effectue de manière comparable, si ce n'est qu'à chaque élément sont associées deux clés : une ligne et une colonne (la ligne la plus en haut est la ligne 0, tandis que la colonne la plus à gauche est la colonne 0).

Nous pourrions ainsi afficher le contenu du tableau bidimensionnel considéré ici en accédant dans l'ordre et manuellement à chaque élément, comme suit :

    echo "|" . $Produits[0][0] . "|" . $Produits[0][1] . "|" . $Produits[0][2] . "| <BR/>" ;

    echo "|" . $Produits[1][0] . "|" . $Produits[1][1] . "|" . $Produits[1][2] . "| <BR/>" ;

    echo "|" . $Produits[2][0] . "|" . $Produits[2][1] . "|" . $Produits[2][2] . "| <BR/>" ;

Nous pourrions obtenir le même résultat, en implémentant une boucle for au sein d'une autre boucle for, de la manière suivante :

    for ($ligne = 0; $ligne <3; $ligne++)

    {

        for ($colonne = 0; $colonne <3; $colonne++)

        {

          echo "|" . $Produits[$ligne][$colonne] ;

        }

          echo "| <BR/>" ;

    }

Chacune des deux variantes précédentes conduit au même affichage dans la fenêtre du browser ou navigateur Web, à savoir :

    | Resis | Resistances | 2 |

    | Condos | Condensateurs | 3 |

    | Transis | Transistors | 5 |

Pour visualiser l'aperçu sans boucle, en cliquant ici. [Exemple 3]. Pour visualiser l'aperçu avec boucle, en cliquant ici. [exemple 4]

La seule différence entre ces variantes est que la seconde est plus courte que la première, dans le cas de tableaux volumineux.

Au lieu de faire référence aux colonnes par des numéros, vous pouvez choisir d'utiliser des noms de colonnes comme c'est le cas de la figure 3. Pour cela, vous pouvez utiliser des tableaux associatifs. Pour stocker le même ensemble d'articles dans un tableau associatif dont les noms de colonnes seraient identiques à ceux de la figure 3, le code suivant pourrait être mis en oeuvre :

    $Produits = array( array( "Code" => "Resis" ,

                              "Description" => "Resistances" ,

                              "Prix" => 2

                            ),

                       array( "Code" => "Condos" ,

                              "Description" => "Condensateurs" ,

                              "Prix" => 3

                            ),

                       array( "Code" => "Transis" ,

                              "Description" => "Transistors" ,

                              "Prix" => 5

                            )

                        ) ;

Un tel tableau se révèle plus facile à manipuler lorsqu'il s'agit de retrouver une valeur individuelle. Il est en effet plus aisé de se souvenir que la description d'un article est stockée dans la colonne Description, que de se souvenir qu'elle est stockée dans la colonne 1. Avec les tableaux associatifs, il n'est pas nécessaire de mémoriser qu'une valeur est stockée à la position [x][y]. Les données peuvent y être facilement retrouvées en spécifiant les noms explicites des lignes et des colonnes.

L'usage de tableaux associatifs nous privent, en revanche de la possibilité d'utiliser une simple boucle for pour parcourir successivement les différentes colonnes du tableau. Le fragment de code qui suit permet d'afficher le contenu du tableau associatif $Produits considéré ici :

    for ($ligne = 0; $ligne <3; $ligne++)

    {

     echo "&nbsp;|&nbsp;" . $Produits[$ligne]["Code"] . "&nbsp;|&nbsp;" . $Produits[$ligne]["Description"] . "&nbsp;|&nbsp;" . $Produits[$ligne]["Prix"] . "&nbsp;|<BR/>" ;

    }

Une boucle for peut être mise en oeuvre pour parcourir le tableau "externe" $Produits indexé numériquement. Chaque ligne de ce tableau $Produit constitue un tableau associatif. Les fonctions each() et list() peuvent ensuite être insérées dans une boucle while pour parcourir les différents tableaux associatifs contenus dans $Produits. Voici le code ainsi formé d'une boucle while imbriquée dans une boucle for :

    for ($ligne = 0; $ligne <3; $ligne++)

    {

    while (list($key, $value) = each($Produits[$ligne]))

    {

    echo "|$value" ;

    }

    echo "|<BR/>" ;

    }

Pour visualiser l'aperçu de deux boucles for et while, en cliquant ici. [Exemple 5].

Vous pouvez créer des tableaux dont la dimension est bien supérieure à deux. Il suffit de créer un tableau dont les éléments sont constitués de tableaux, eux-mêmes constitués de tableaux, et ainsi de suite.

Un tableau tridimensionnel se caractérise par une largeur, une hauteur et une profondeur. Si vous préférez vous représenter un tableau bidimensionnel sous la forme d'une table composée de lignes et de colonnes, vous pouvez vous représenter un tableau tridimensionnel comme un empilement de telles tables. Chaque élément est alors référencé par sa couche, sa ligne et sa colonne.

Supposons que le site de chez Jean-Pierre classe ses articles en différentes catégories. Un tableau tridimensionnel pourrait être employé pour stocker cette information supplémentaire. La figure 4 montre la structure que pourrait avoir un tel tableau.

Tableau_Tridimensionnel.PNG

Dans le fragment de code qui suit, et qui définit le tableau schématisé de la figure 4, il apparaît clairement qu'un tableau tridimensionnel est un tableau contenant d'autres tableaux :

    $Categories = array( array( array( "TVC_Resis", "Resistances", 2 ),

                                array( "TVC_Condos", "Condensateurs", 3 ),

                                array( "TVC_Transis", "Transistors", 5 )

                              ),

                          array(array( "AUTO_Resis", "Resistances", 2 ),

                                array( "AUTO_Condos", "Condensateurs", 3 ),

                                array( "AUTO_Transis", "Transistors", 5 )

                              ),

                          array(array( "HI-FI_Resis", "Resistances", 2 ),

                                array( "HI-FI_Condos", "Condensateurs", 3 ),

                                array( "HI-FI_Transis", "Transistors", 5 )

                              )

                           ) ;

Etant donné que ce tableau ne comprend que des clés numériques, des boucles for imbriquées peuvent être utilisées pour afficher son contenu :

    for ($Couche = 0; $Couche < 3; $Couche++)

    {

       echo "<BR/> <font face='Arial' size='3' color='#800000'><b>&nbsp;&nbsp;&nbsp;&nbsp;Couche $Couche <BR/> <BR/>" ;

       for ($Ligne = 0; $Ligne < 3; $Ligne++)

       {

          for ($Colonne = 0; $Colonne < 3; $Colonne++)

             {

                echo "&nbsp;&nbsp;&nbsp;&nbsp;<font face='Arial' size='3' color='#005500'><b>&nbsp;|&nbsp;" . $Categories[$Couche][$Ligne][$Colonne] ;

             }

             echo "&nbsp;euros&nbsp;|&nbsp; </b> </font> </font> <BR/>" ;

       }

    }

Pour visualiser l'aperçu du tableau tridimensionnel, en cliquant ici. [Exemple 6].

Compte tenu de la manière dont sont créés les tableaux multidimensionnels, vous pouvez très bien générer des tableaux à quatre, cinq ou six dimensions. Le langage PHP n'impose en réalité aucune limite sur le nombre de dimensions d'un tableau. Toutefois, les constructions à plus de trois dimensions se révèlent difficiles à visualiser. Des tableaux à trois dimensions ou moins sont en général tout à fait suffisants pour traiter la plupart des problèmes et situations du monde réel.

Tri de tableaux :

Il apparaît souvent très utile de trier les données apparentées stockées dans les tableaux. Le tri du contenu d'un tableau unidimensionnel est très simple à implémenter en PHP.

Utilisation de la fonction sort() :

Les deux lignes de code qui suivent, conduisent au tri d'un tableau, par ordre alphabétique croissant :

    $Produits = array( "Resistances", "Condensateurs", "Transistors" ) ;

    sort($Produits) ;

Pour visualiser l'aperçu, en cliquant ici. [Exemple 7].

Dans l'ordre et après l'exécution de ce code, les éléments contenus dans le tableau sont à présent : Condensateurs, Résistances, Transistors.

Il est également possible de trier des valeurs par ordre numérique. Prenons le cas d'un tableau contenant les prix des articles vendus par Jean-Pierre. Le contenu de ce tableau pourrait être trié par ordre numérique croissant, au moyen des instructions suivantes :

    $Prix = array( 100, 70, 5 ) ;

    sort($Prix) ;

Dans l'ordre et après l'exécution de ce code, les prix seraient alors : 5, 70, 100. Il en va de soi, que nous montrerons pas un exemple car, c'est relativement facile du point de vue de programmation.

Notez que la fonction sort() est sensible à la casse (à l'utilisation de majuscules et minuscules). Les lettres majuscules ont systématiquement plus de poids que toute lettre minuscule. Ainsi, "A" est inférieure à "Z", mais "Z" est supérieure à "a".

Utilisation des fonctions asort() et ksort() pour trier des tableaux associatifs :

Si nous choisissons de stocker dans un tableau associatif les articles et les prix correspondants, nous devrons avoir recours à différents types de fonctions de tri pour obtenir que les clés et les valeurs correspondantes restent couplées lors du tri.

La première instruction qui suit crée un tableau associatif contenant les trois articles décrits précédemment, avec les prix correspondants, tandis que la deuxième ligne de code procède au tri de ce tableau par ordre de prix croissants :

    $Prix = array( "Resistances" => 2, "Condensateurs" => 3, "Transistors" => 5 ) ;

    asort($Prix) ;

La fonction asort() ordonne le contenu du tableau qui lui est fourni comme argument, d'après la valeur de chaque élément. Dans le tableau considéré ici, les valeurs sont les prix, tandis que les clés sont les descriptions textuelles. Pour trier le tableau non pas par prix, mais par description, c'est la fonction ksort() qui doit être employée. La fonction ksort() effectue un tri par clé et non pas par valeur. Le fragment de code qui suit aboutit à un tableau trié par ordre alphabétique des clés (Condensateurs, Résistances, Transistors).

    $Prix = array( "Resistances" => 2, "Condensateurs" => 3, "Transistors" => 5 ) ;

    ksort($Prix) ;

Tri dans l'ordre inverse :

Nous venons d'examiner les fonctions de tri sort(), asort() et ksort(), qui effectuent toutes trois des tris par ordre croissant. A chacune de ces fonctions correspondant une fonction de tri inverse, dont la fonctionnalité est identique si ce n'est qu'elle procède à un tri décroissant. Ces versions inverses des fonctions de tri sont respectivement rsort(), arsort() et krsort().

Les fonctions de tri inverse s'utilisent de la même manière que les fonctions de tri vues jusqu'ici. La fonction rsort() permet de trier par ordre décroissant un tableau unidimensionnel indexé numériquement. La fonction arsort trie par ordre décroissant le tableau associatif unidimensionnel qui est passé comme argument, à partir des valeurs des éléments. Quant à la fonction krsort(), elle trie un tableau associatif unidimensionnel par ordre décroissant, à partir des clés des éléments.

Tri de tableaux multidimentionnels :

Le tri d'un tableau à plus d'une dimension, ou par un ordre autre que l'ordre alphabétique ou numérique, se révèle plus compliqué. L'interpréteur PHP sait comparer deux nombres ou deux chaînes de caractères. Mais dans un tableau multidimensionnel, chaque élément est lui-même un tableau. L'interpréteur PHP ne connaît pas d'emblée les critères à retenir pour comparer deux tableaux. Par conséquent, vous devez créer une méthode pour opérer cette comparaison. Le plus souvent, la comparaison de mots ou de nombres est triviale. Par contre, pour des objets complexes, le tri peut se révéler problèmatique.

Tris définis par l'utilisateur :

Soit le tableau déjà considéré précédemment, et dont la définition est la suivante :

    $Produits = array( array( "Resis", "Resistances", 2) ,

                       array( "Condos", "Condensateurs", 3) ,

                       array( "Transis", "Transistors", 5)) ;

Ce tableau contient trois articles vendus par le site de chez Jean-Pierre, avec un code, une description et un prix par article.

A quel résultat aboutira le tri de ce tableau ? Deux types d'ordre au moins pourraient ici être utiles : un tri des articles par ordre alphabétique des descriptions, ou par ordre numérique des prix. Chacun de ces tris peut être implémenté, en utilisant la fonction usort() et en indiquant à l'interpréteur PHP le critère sur lequel la comparaison doit s'effectuer. Pour cela, nous allons devoir écrire notre propre fonction de comparaison.

Le fragment de code donné ci-dessous conduit au tri du tableau considéré ici par ordre alphabétique des descriptions, c'est-à-dire par rapport à la deuxième colonne du tableau :

    function compare($x, $y)

       {

          if ($x[1] == $y[1] )

             return 0 ;

          elseif ($x[1] < $y[1])

             return -1 ;

          else

             return 1 ;

       }

    usort($Produits, "compare") ;

Pour de plus amples informations et de compréhension, nous indiquons le programme complet du tableau bidimensionnel comme suit, afin de bien utiliser la fonction usor() :

<HTML>

     <HEAD>

                    <TITLE> Tris D&eacute;finis par l'Utilisateur </TITLE>

     </HEAD>

              <BODY>

     <BR/> <BR/>

     <H2> Tableau Bidimensionnel - Utilisation avec la fonction "usort()" uniquement r&eacute;serv&eacute; pour les fonctions cr&eacute;&eacute;es par l'utilisateur donc, tri du tableau par ordre alphab&eacute;tique croissant des composants &eacute;lectroniques, concernant cet exemple. </H2>

     <?php

    function compare($x, $y)

       {

          if ($x[1] == $y[1] )

             return 0 ;

          elseif ($x[1] < $y[1])

             return -1 ;

          else

             return 1 ;

       }

    echo "<BR/> <BR/>" ;

    $Produits = array( array( "Resis", "Resistances", 2) ,

                       array( "Condos", "Condensateurs", 3) ,

                       array( "Transis", "Transistors", 5)) ;

    usort($Produits, "compare") ;

    echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;<font face='Arial' size='3' color='#005500'> <b>" . $Produits[0][0] . "&nbsp;|&nbsp;" . $Produits[0][1] . "&nbsp;|&nbsp;" . $Produits[0][2] . "&nbsp;euros | <BR/>" ;

    echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;" . $Produits[1][0] . "&nbsp;|&nbsp;" . $Produits[1][1] . "&nbsp;|&nbsp;" . $Produits[1][2] . "&nbsp;euros | <BR/>" ;

    echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;" . $Produits[2][0] . "&nbsp;|&nbsp;" . $Produits[2][1] . "&nbsp;|&nbsp;" . $Produits[2][2] . "&nbsp;euros | </b> </font> <BR/>" ;

    ?>

              </BODY>

</HTML>

Pour visualiser l'aperçu, en cliquant ici. [Exemple 8].

Jusqu'ici dans cette leçon, nous avons mis en oeuvre diverses fonctions prédéfinies dans le langage PHP. Pour trier notre tableau, nous avons nous-même défini une fonction dans le code précédent. L'écriture de fonctions personnalisées seront traitées, en détail dans les prochaines leçons, mais, pour l'heure, en voici une briève explication.

La définition d'une fonction en PHP requiert le mot clé function. Pour définir une fonction personnalisée, vous devez attribuer un nom à votre fonction. Choisissez des noms explicites. Dans le cas considéré ici par exemple, nous avons choisi de nommer notre fonction compare(). Nombre de fonctions prennent des paramètres ou des arguments. Notre fonction compare() en prend deux : un argument appelé x, et un argument appelé y. Cette fonction sert à comparer les deux valeurs qui lui sont passées comme argument.

Pour cet exemple, les paramètres x et y contiendront deux des tableaux stockés dans le tableau principal, et qui représentent chacun un article différent. Pour accéder à la Description du tableau x, nous devons taper $x[1]. En effet, la Description est le deuxième élément dans chacun des "sous-tableaux", et la numérotation commence à zéro. Les variables tableaux $x[1] et $y[1] sont utilisés pour comparer les Descriptions stockées dans les tableaux passés comme arguments à la fonction compare().

Lorsque l'exécution d'une fonction s'achève, celle-ci peut retourner une réponse au code qui l'a invoquée. On dit alors que la fonction renvoie une valeur. Pour qu'une fonction renvoie une valeur, vous devez y inclure le mot clé return. Par exemple, la ligne de code return 1 ; renvoie la valeur 1 au code qui a appelé la fonction.

Pour que la valeur renvoyée par compare() puisse être utilisée par usort(), la fonction compare() doit comparer x et y. La fonction doit renvoyer la valeur 0 si x est égal à y, un nombre négatif si x est inférieur à y, et un nombre positif si x est supérieur à y. Notre fonction compare renvoie ainsi 0, 1, ou - 1 selon les valeurs x et y qui lui sont fournies.

La dernière ligne du code (couleur rouge foncée) précédent invoque la fonction usort(), prédéfinie dans PHP. Le nom du tableau à trier doit être spécifié dans l'appel de la fonction usort(), ainsi que le nom d'une fonction de comparaison personnalisée, en l'occurrence compare().

Pour trier notre tableau sur d'autres critères, il suffit d'ajuster la définition de notre fonction de comparaison. Par exemple, pour obtenir le tri du tableau par prix, la comparaison doit porter sur la troisième colonne des tableaux. La définition de la fonction compare() devrait alors être la suivante :

    function compare($x, $y)

       {

          if ($x[2] == $y[2] )

             return 0 ;

          elseif ($x[2] < $y[2])

             return -1 ;

          else

             return 1 ;

       }

    usort($Produits, "compare") ;

L'exécution de l'instruction ($Produits, "compare") produit le tri du tableau par ordre de prix croissants.

Le préfixe "u" de la fonction usort() est l'abréviation de user (utilisateur). En effet, cette fonction requiert la spécification d'une fonction de comparaison définie par l'utilisateur. De la même manière, les versions uasort() et uksort() des fonctions asort() et ksort() nécessitent également qu'une fonction de comparaison définie par l'utilisateur leur soit passée comme argument.

La fonction uasort() fait pendant à la fonction asort(), et s'utilise pour trier un tableau associatif par valeurs. Invoquez asort() lorsque les valeurs sont de simples nombres ou du texte. Si les valeurs sont des objets plus compliqués, comme des tableaux, définissez une fonction de comparaison, et utilisez la fonction prédéfinie uasort().

La fonction uksort() fait pendant à la fonction ksort(), et s'utilise pour trier un tableau associatif par clés. Invoquez ksort() lorsque les clés sont de simples nombres ou du texte. Si les clés sont des objets plus compliqués, comme des tableaux, définissez une fonction de comparaison, et utilisez la fonction prédéfinie uksort().

Tris définis par l'utilisateur, dans l'ordre inverse :

Chacune des fonctions sort(), asort() et ksort() a son équivalent, comprenant un "r" (reverse) dans le nom de la fonction, et qui produit un tri dans l'ordre inverse. Par contre, dans le cas des tris définis par l'utilisateur, il n'existe pas directement de variante effectuant le tri inverse. Il est néanmoins possible de trier un tableau multidimensionnel dans l'ordre inverse, en fournissant une fonction de comparaison qui renvoie les valeurs opposées. Ainsi, pour obtenir un tri dans l'ordre inverse, il suffit que la fonction de comparaison renvoie la valeur 1 lorsque x est inféreur à y et -1 lorsque x est supérieur à y. Par exemple :

    function ReverseCompare($x, $y)

       {

          if ($x[2] == $y[2] )

             return 0 ;

          elseif ($x[2] < $y[2])

             return 1 ;

          else

             return -1 ;

       }

    usort($Produits, "ReverseCompare") ;

Pour visualiser l'aperçu, en cliquant ici. [Exemple 9].

L'invocation de la fonction usort ($Produits, "ReverseCompare") à la suite du code précédent produirait un tableau trié par ordre de prix décroissants.

Pour l'instant, nous terminons ce premier chapitre et nous verrons dans le prochain, la suite de cette leçon de certaines fonctions intéressantes, (shuffle()) et le chargement de tableau à partir de fichiers, etc. ...



  Cliquez ici pour la leçon suivante ou dans le sommaire prévu à cet effet.   Haut de page
  Page précédente   Page suivante







Nombre de pages vues, à partir de cette date : le 23 MAI 2019

compteur de visite

    




Envoyez un courrier électronique à Administrateur Web Société pour toute question ou remarque concernant ce site Web. 

Version du site : 10. 5. 14 - Site optimisation 1280 x 1024 pixels - Faculté de Nanterre - Dernière modification : 19 MAI 2019.   

Ce site Web a été Créé le, 14 Mars 1999 et ayant Rénové, en MAI 2019.