6- Les tableaux

les tableaux sont essentiels en développement. En PHP, comme dans d’autres langages de programmation, les tableaux sont en réalité un type de variable particulier. En résumé, ils permettent de stocker plusieurs valeurs dans une seule variable. Ils permettent de répondre à beaucoup de besoins en développement et leur maîtrise est indispensable.

Un tableau est un type de variable spécial. En PHP, comme dans d’autres langages, les tableaux sont appelés des array. Le type de variable pour un tableau est donc array

Les nombreuses fonctions natives de PHP applicables aux tableaux permettent les opérations les plus diverses dans la gestion des tableaux.

A- Créer des tableaux

La fonction array ()

La fonction array () permet de créer de manière rapide des tableaux indicés ou associatifs. C’est elle qui sera le plus souvent utilisée pour la création de tableaux.
Depuis la version 5.4, elle peut être remplacée par une syntaxe courte en écrivant simplement

[ ] à la place de la fonction array ().

exemple:

<?php
   $villes = array('Rabat', 'Fès', 'Tanger');
   echo $villes;
?>

A- Les tableaux indicés

Dans un tableau, chaque valeur est reliée par défaut à une clé ou à une key en anglais. En somme, un tableau est une suite d’associations de clés et de valeurs (keyvalue en anglais). Par défaut, les valeurs sont reliées à une clé numérique. On parle alors de tableau numéroté ou indexé, et en anglais de indexed array.

La façon la plus élémentaire de créer un tableau indicé consiste à définir individuellement une valeur pour chacun de ses éléments, et ce de la manière suivante :

Où n est un indice entier quelconque, et valeur un scalaire ou une variable de type integer, double, boolean, string ou array.
Pour créer un tableau composé de plusieurs éléments en une seule opération, vous disposez heureusement de la fonction array (), dont la syntaxe est la suivante :

Ou encore avec la syntaxe courte :

B- Les tableaux associatifs

Nous avons pour le moment uniquement travaillé avec des tableaux numérotés. Les clés étaient numériques. Il existe un autre type de tableau où les clés sont des chaînes de caractères. On parle alors de tableau associatif et en anglais de associative array. Il y a deux solutions pour créer un tableau associatif.
La syntaxe avec la fonction array () est la suivante :

La syntaxe courte est :

Exemple:

<?php
   $villes = array(
      'Fontainebleau' => 77,
      'Paris' => 75,
      'Lyon' => 69
   );
?>
<?php
   $villes['Fontainebleau'] = 77;
   $villes['Paris'] = 75;
   $villes['Lyon'] = 69;
?>

La différence entre des tableaux numéroté et associatif se situe au niveau du type de la clé. Un tableau numéroté utilise des clés numériques, tandis qu’un tableau associatif utilise des chaînes de caractères.

C- Créer un tableau à partir d’une chaîne

Une dernière façon utile de créer des tableaux consiste à décomposer une chaîne de caractères en un ensemble de sous-chaînes, dont chacune devient un élément de tableau.
Cette opération peut être effectuée très simplement au moyen de la fonction explode (), dont la syntaxe est la suivante :

Cette fonction retourne un tableau composé des sous-chaînes de $chaine créées avec le critère de coupure contenu dans la chaîne « coupe », l’entier nbmax facultatif donnant le nombre maximal de sous-chaîne désiré.

$chaine = "La cigale et le fourmi";
$tabmot = explode("",$chaine);
print_r($tabmot);

En passant comme premier paramètre le caractère « @ », vous pouvez décomposer une adresse e-mail avec le code suivant :

$adresse = "contact@mohamed-bentaleb.ma";
$tabsite=explode("@",$adresse);

B- Lire les éléments des tableaux

Il est souvent utile d’afficher l’ensemble des informations contenues dans un tableau, que ce soit la valeur des éléments qu’il contient ou les couples indice-valeur et clé-valeur des tableaux respectivement indicés ou associatifs.

Lire avec une boucle for

La boucle for a besoin d’un paramètre d’arrêt. Vous allez employer pour cela la fonction count (), qui retourne le nombre total d’éléments de la boucle. L’utilisation de la variable $i comme compteur de la boucle permet de parcourir l’ensemble des valeurs du tableau unidimensionnel.

$montab = array ("Paris","London","Bruxel");
    for ($i=0 ;$i<count($montab);$i++){
        echo "L'élément $i est $mo,tab[$i <br>";
    }

L’élément 0 est Paris

L’élément 1 est London

L’élément 2 est Bruxel

Lire avec une boucle while

La boucle for nécessite par définition de connaître le nombre d’itérations à effectuer tel que fourni par la fonction count(). Ce n’est pas le cas avec la boucle while, qui se révèle de ce fait plus efficace dans le cas d’un tableau retourné après une requête sur une base de données, le nombre de réponses étant bien évidemment inconnu.

$montab = array ("Paris","London","Bruxel");
    $i=0;
    while (isset($montab[$i])){
        echo "L'élémént $i est $mo,tab[$i <br>";
        $i++;
    }

L’instruction foreach

L’instruction foreach () n’est utilisable qu’à partir des versions 4 de PHP. Elle se révèle particulièrement efficace pour les tableaux associatifs mais fonctionne également pour les tableaux indicés.

Indispensable, le mot-clé as permet de récupérer successivement toutes les valeurs des éléments du tableau $tab dans la variable $valeur, mais sans les indices correspondants.
Pour les tableaux associatifs, vous disposez d’une syntaxe plus perfectionnée.
Le code suivant :

Exemple:

La boucle foreach permet de parcourir simplement les tableaux. Elle ne fonctionne d’ailleurs qu’avec ce type de variable. Il existe deux syntaxes pour cette boucle.

?php
   $villes = array('Fontainebleau', 'Paris', 'Lyon');
   foreach($villes as $key => $ville) {
      echo $ville.' a la clé '.$key.'<br />';
   }
?>
<?php
   $villes = array('Fontainebleau', 'Paris', 'Lyon');
   foreach($villes as $key => $ville) :
      echo $ville.' a la clé '.$key.'<br />';
   endforeach;
?>

Pour la boucle foreach, pas besoin de condition qui permet de stopper la boucle. En effet, cette dernière parcourt seulement tous les éléments du tableau. Elle commence donc au premier et s’arrête automatiquement après la lecture du dernier. On précise donc en premier lieu le tableau que l’on souhaite parcourir. Dans notre exemple, la variable $villes. À chaque itération de la boucle, la clé de l’élément parcouru est assignée dans la variable $key et la valeur de l’élément est assignée à la variable $ville.

C- Manipuler des tableaux

PHP dispose d’un grand nombre de fonctions permettant d’effectuer toutes sortes de manipulations de tableaux existants. Citons notamment l’extraction, l’ajout ou la suppression d’une partie des éléments, la fusion ou l’intersection de plusieurs tableaux, diverses opérations de tri des éléments ou des clés ou encore l’application d’une fonction à l’ensemble des éléments.

Modifier un Tableau

Votre tableau est créé et vous souhaitez modifier un élément ? Pour un tableau numéroté ou associatif, la méthode est la même. Il suffit de suivre la syntaxe décrite dans les exemples ci-dessous.

<?php
   $villes = array('Fontainebleau', 'Paris', 'Lyon');
   $villes[0] = 'Melun';
   var_dump($villes);
?>
<?php
   $villes = array('Fontainebleau' => 77, 'Paris' => 75, 'Lyon' => 69);
   $villes['Fontainebleau'] = 'Seine-et-Marne';
   var_dump($villes);
?>

Ajouter et enlever des éléments

Une fois un tableau créé à l’aide de la fonction array () et certaines valeurs affectées à ses éléments, vous pouvez effectuer diverses manipulations d’ajout ou de retrait d’éléments selon les besoins. La fonction :

COMPTER LES ÉLÉMENTS D’UN TABLEAU

Il peut être utile de compter le nombre d’éléments que contient un tableau. Pour répondre à ce besoin, il existe une fonction qui porte très bien son nom, count(). Elle s’utilise de la manière suivante :

?php
   $villes = array('Fontainebleau', 'Paris', 'Lyon');
   $n_villes = count($villes);
   echo 'Il y a '.$n_villes.' éléments dans le tableau $villes.';
?>

RECHERCHER UNE VALEUR DANS UN TABLEAU

La fonction in_array() permet de vérifier si une valeur existe dans une variable de type array, un tableau. Elle retourne TRUE si c’est le cas, et FALSE dans le cas inverse.

<?php
   $villes = array('Fontainebleau', 'Paris', 'Lyon');
   
   $ville_recherche = 'Paris';
   if(in_array($ville_recherche, $villes)) :
      echo 'Oui, la clé '.$ville_recherche.' existe dans le tableau $villes.';
   else :
      echo 'Non, la clé '.$ville_recherche.' n\'existe pas dans le tableau $villes.';
   endif;
?>

RECHERCHER UNE CLÉ DANS UN TABLEAU

La fonction array_key_exists() permet de vérifier si une clé existe dans un tableau. Elle retourne TRUE si c’est le cas, et FALSE dans le cas inverse.

<?php
   $villes = array(
      'Fontainebleau' => 77,
      'Paris' => 75,
      'Lyon' => 69
   );
   $ville_recherche = 'Marseille';
   
   if(array_key_exists($ville_recherche, $villes)) :
      echo 'Oui, la clé '.$ville_recherche.' existe dans le tableau $villes.';
   else :
      echo 'Non, la clé '.$ville_recherche.' n\'existe pas dans le tableau $villes.';
   endif;
?>

Extraire une partie d’un tableau

À partir d’un tableau donné, il est possible de créer un nouveau tableau comme sous ensemble du tableau initial et ne contenant qu’un nombre déterminé de ses éléments.
Cette opération est réalisée à l’aide de la fonction array_slice (), qui permet d’effectuer divers types d’extractions.
La syntaxe de la fonction array_slice () est la suivante :

Fusionner des tableaux

Vous pouvez, par exemple, réunir deux ou plusieurs tableaux en un seul à l’aide de la fonction array_merge (), dont la syntaxe est la suivante :

Intersection et différence de deux tableaux

L’intersection de deux ensembles est constituée par les éléments qui appartiennent à la fois aux deux ensembles. La différence de deux ensembles désigne les éléments qui appartiennent au premier et pas au second. En d’autres termes, sont enlevés du premier tableau les éléments qui appartiennent aussi au second.
PHP offre deux fonctions pour réaliser ces opérations sur des tableaux, array_intersect () et array_diff ().

Trier les éléments d’un tableau

Quand une fonction retourne un tableau de valeurs, comme le font, par exemple, les fonctions de recherche sur une base de données MySQL, les valeurs des éléments apparaissent dans un ordre qui n’est pas nécessairement celui souhaité pour l’affichage des informations.
Pour améliorer la présentation des données, il est souvent utile d’effectuer un tri des valeurs contenues dans le tableau avant de les utiliser pour créer un affichage dans une page web. PHP fournit nombre de fonctions natives permettant de réaliser les opérations de tri les plus diverses.
Les fonctions de tri dans l’ordre ASCII proposées par PHP sont les suivantes :
array sort ($tab) Trie les valeurs du tableau $tab en ordre croissant des codes ASCII des caractères qui les composent (donc en tenant compte de la casse des caractères).
Les correspondances entre les indices et les valeurs des éléments sont perdues après le tri.
array rsort ($tab) Trie les valeurs du tableau $tab en ordre décroissant des codes ASCII des caractères qui les composent. Les correspondances entre les indices et les valeurs des éléments sont perdues après le tri.
array_reverse ($tab) : Inverse l’ordre des valeurs des éléments de $tab. Les indices sont évidemment perdus.


Mélanger les valeurs de façon aléatoire

Certaines applications gèrent des nombres aléatoires, pour des tirages au sort, par exemple. D’autres affichent des informations dans un ordre différent pour chaque visiteur. Dans tous ces cas, vous pouvez utiliser un tableau contenant les informations à afficher et mélanger ces éléments de manière aléatoire au moyen de la fonction shuffle (), dont la syntaxe est la suivante :

Opérer une sélection des éléments
Lorsqu’un tableau contient un nombre important d’informations, vous pouvez réaliser une sélection de ses éléments à l’aide de la fonction array_filter () et ne retenir que ceux qui répondent à une condition particulière définie par le programmeur.
La syntaxe de la fonction array_filter () est la suivante :


Elle retourne un nouveau tableau ne contenant que les éléments de $tab qui répondent à la condition définie dans la fonction dont le nom est passé en second paramètre. Le tableau initial est conservé.

EXERCICES (LES TABLEAUX)

EXERCICE 13

Déclarer une variable de type array qui stocke les informations suivantes :

  • France : Paris
  • Allemagne : Berlin
  • Italie : Rome

Afficher les valeurs de tous les éléments du tableau en utilisant la boucle foreach.

EXERCICE 14

En utilisant la fonction rand(), remplir un tableau avec 10 nombres aléatoires. Puis, tester si le chiffre 42 est dans le tableau et afficher un message en conséquence. Enfin, afficher le contenu de votre tableau avec var_dump.

EXERCICE 15

En utilisant la fonction rand(), remplir un tableau avec 10 nombres aléatoires. Puis, trier les valeurs dans deux tableaux distincts. Le premier contiendra les valeurs inférieures à 50 et le second contiendra les valeurs supérieures ou égales à 50. Enfin, afficher le contenu des deux tableaux.

EXERCICE 16

En utilisant le tableau ci-dessous, afficher seulement les pays qui ont une population supérieure ou égale à 20 millions d’habitants.

<?php
   $pays_population = array(
      'France' => 67595000,
      'Suede' => 9998000,
      'Suisse' => 8417000,
      'Kosovo' => 1820631,
      'Malte' => 434403,
      'Mexique' => 122273500,
      'Allemagne' => 82800000,
   );
?>

EXERCICE 17

En utilisant le tableau ci-dessous, compter le nombre d’éléments du tableau.

<?php
   $pays_population = array(
      'France' => 67595000,
      'Suede' => 9998000,
      'Suisse' => 8417000,
      'Kosovo' => 1820631,
      'Malte' => 434403,
      'Mexique' => 122273500,
      'Allemagne' => 82800000,
   );
?>

EXERCICE 18

Quelle syntaxe permet d’afficher le deuxième élément du tableau $cocktails ?

<?php
   $cocktails = array('Mojito', 'Long Island Iced Tea', 'Gin Fizz', 'Moscow mule');
?>

EXERCICE 19

Quelle syntaxe permet d’afficher l’âge de Manuel ?

<?php
   $personnes = array(
      'Jean' => 16,
      'Manuel' => 19,
      'André' => 66
   );
?>

CORRECTION

EXERCICE 13

<?php
   $tableau = array(
      'France' => 'Paris',
      'Allemagne' => 'Berlin',
      'Italie' => 'Rome'
   );
   foreach($tableau as $t) {
      echo $t.' ';	   
   }
?>

EXERCICE 14

<?php
   $tableau = array();
   $i = 0;
   while($i < 10) {
      $tableau[] = rand(0, 50);
      $i++;	  
   }
   if(in_array(42, $tableau))
      echo 'Le nombre 42 est bien dans le tableau.';
   else
      echo 'Le tableau ne contient pas la valeur 42.';
   echo '<br />';  
   var_dump($tableau);
?>

EXERCICE 15

<?php
   $tableau = array();
   $tableau1 = array();
   $tableau2 = array();
   $i = 0;
   while($i < 10) {
      $tableau[] = rand(0, 100);
      $i++;	  
   }
   foreach($tableau as $t) {
      if($t < 50) {
         $tableau1[] = $t;
      } else {
         $tableau2[] = $t;		  
      }
   }
   
   echo 'Tableau 1 : ';
   foreach($tableau1 as $t1) {
      echo $t1.' ';
   }
   
   echo '<br />Tableau 2 : ';
   foreach($tableau2 as $t2) {
      echo $t2.' ';
   }
?>

EXERCICE 16

<?php
   $pays_population = array(
      'France' => 67595000,
      'Suede' => 9998000,
      'Suisse' => 8417000,
      'Kosovo' => 1820631,
      'Malte' => 434403,
      'Mexique' => 122273500,
      'Allemagne' => 82800000,
   );
   echo '<p>Les pays suivants ont une population supérieure à 20 millions d\'habitants.</p><ul>';
   foreach($pays_population as $pays => $population) {
      if($population >= 20000000) {
	     echo '<li>'.$pays.'</li>';
      }
   }
   echo '</ul>';
?>

EXERCICE 17

<?php
   $pays_population = array(
      'France' => 67595000,
      'Suede' => 9998000,
      'Suisse' => 8417000,
      'Kosovo' => 1820631,
      'Malte' => 434403,
      'Mexique' => 122273500,
      'Allemagne' => 82800000,
   );
   
   echo 'Il y a '.count($pays_population).' éléments dans le tableau.';
?>

EXERCICE 18

<?php
   $cocktails = array('Mojito', 'Long Island Iced Tea', 'Gin Fizz', 'Moscow mule');
   echo $cocktails[1];
?>

EXERCICE 19

<?php
   $personnes = array(
      'Jean' => 16,
      'Manuel' => 19,
      'André' => 66
   );
   echo 'Manuel a '.$personnes['Manuel'].' ans.';
?>

Retour Plan de Cours