PHP (PHP Hypertext Preprocessor)

Auteur: Mohamed CHINY Durée necessaire pour le cours de PHP (PHP Hypertext Preprocessor) Niveau recommandé pour le cours de PHP (PHP Hypertext Preprocessor) Supports vidéo non disponibles pour ce cours Exercices de renforcement disponibles pour ce cours Quiz disponible pour ce cours

Page 10: Les tableaux

Toutes les pages

Les variables tableau

Les tableaux sont des variables qui peuvent contenir plusieurs valeurs à la fois. Ils peuvent être indexés ou associatifs et peuvent aussi avoir plusieurs dimensions.

Tableaux indexés

Un tableau indexé contient des indices numériques qui indexent le contenu souhaité. Ces indexes commencent par défaut de 0 et s'incrémentent de 1 à chaque fois.

Pour créer un tableau indexé en PHP il existe plusieurs méthodes:

Première méthode
$tab=array("PHP","Coté serveur",60);
Ici, nous avons créé un tableau indexé au nom de $tab (il s'agit d'une variable). Le tableau contient trois valeurs "PHP", "Coté serveur" et 60.

Vous avez certainement remarqué que les valeurs contenues dans le tableau ne sont pas du même type. En effet, des types différents peuvent cohabiter dans le même tableau (comme pour Javascript).

Dans ce cas la première entrée du tableau $tab est indexée par 0, la deuxième par 1 et la troisième par 2. Alors on aurait pu déclaré le tableau autrement. Il s'agit de la deuxième méthode.

Deuxième méthode
$tab=array();
$tab[0]="PHP";
$tab[1]="Coté serveur";
$tab[2]=60;
Dans ce cas, la déclaration des indexes et plus explicite. Puisqu'on les manipule directement alors rien ne nous oblige à les incrémenter de 1. Par exemple on peut faire ceci:
$tab=array();
$tab[0]="PHP";
$tab[9]="Coté serveur";
$tab[10]=60;
Dans ce cas les indexes de 1 à 8 n'existent pas, et par conséquent les variables de $tab[1] jusqu'à $tab[8] n'existent pas non plus.

Troisième méthode
$tab=array();
$tab[]="PHP";
$tab[]="Coté serveur";
$tab[]=60;
Ici les indexes sont implicites et c'est le compilateur qui en déduit les valeurs qui commencent par défaut de 0 et s'incrémentent de 1.
Notez que pour la deuxième et la troisième méthode la première instruction $tab=array() est facultative. Mais le fait de la déclarer est vu comme une bonne habitude.

Tableaux associatifs

Si un tableau indexé contient des indices numériques qui indexent les entrées, un tableau associatif , quant-à lui, contient des clés. Ces clés sont des chaînes de caractères qui permettent d'avoir une idée plus claire sur le contenu indexé.

Par exemple, le dernier tableau créé contient trois valeurs "PHP", "Coté serveur" et 60. Mais on ne sait pas ce que représentent réellement ces trois entrées. Essayons maintenant de les déclarer au sein d'un tableau associatif.

Première méthode
$tab=array("langage" => "PHP" , "execution" => "Coté serveur" , "heures" => 60);
En fait, les trois chaînes "langage", "execution" et "heures" sont les clés du tableau associatif qui pointent respectivement sur les valeurs "PHP", "Coté serveur" et 60. Pour dire qu'une clé pointe sur une valeur on utilise la séquence =>.

Vous avez donc compris que les entrées du tableau désignent:
  • Langage: PHP
  • Niveau d’exécution: Coté serveur
  • Nombre d'heures nécessaires pour en maîtriser les bases: 60 heures

Vous vous dites certainement: "Si mon tableau était plus grand que ça, alors le fait de le déclarer sur la même ligne causerait certainement des erreurs de saisie". En effet vous avez raison. Il y 'aurait beaucoup de doubles cotes ou simples cotes et beaucoup de séquences =>. Alors la probabilité de commettre des erreurs de saisie est plus élevée.

Le dernier code peut donc c'écrire ainsi:
<?php
   $tab=array(
      "langage" => "PHP" ,
      "execution" => "Coté serveur" ,
      "heures" => 60
   );
?>
De cette manière vous déclarez une entrée par ligne, le code devient plus lisible et le risque d'erreur est minimisé.
Les chaînes de caractères aussi peuvent être découpées sur plusieurs lignes si elle vous semblent très longues.
Deuxième méthode

Il s'agit là de déclarer les entrées du tableau ligne par ligne:
<?php
   $tab=array();
   $tab["langage"] = "PHP";
   $tab["execution"] = "Coté serveur";
   $tab["heures"] = 60;
?>

Tableaux à plusieurs dimensions

Les tableaux qu'on a vu précédemment contiennent une seule dimensions. Il est toute fois possible de créer des tableaux à plusieurs dimensions, soit directement ou en déclarant les tableaux les uns dans les autres.

Pour simplifier on va voir l'exemple d'un tableau indexé à deux dimensions.

Supposons que nous disposons des trois tableaux à une dimension suivants:
$tab1 = array("A" , "B" , "C");
$tab2 = array("D" , "E" , "F");
$tab3 = array("G" , "H" , "I");
Supposons maintenant que nous voulons mettre ces trois tableaux dans un seul:
$tab=array($tab1 , $tab2 , $tab3);
On schématisant ce tableau on obtient:

A
[0][0]
B
[0][1]
C
[0][2]
D
[1][0]
E
[1][1]
F
[1][2]
G
[2][0]
H
[2][1]
I
[2][2]

Le tableau $tab est donc définit sur deux dimensions. Il faut, par conséquent, déclarer deux crochets pour accéder à l'une des valeurs qu'il contient (un pour la ligne et l'autre pour la colonne).

Donc
echo $tab[0][0]; // Affiche: A
echo $tab[1][2]; // Affiche: F

Parcourir un tableau: structure foreach

Pour parcourir un tableau, la solution la plus classique consiste à utiliser la boucle for ou la boucle while. Cependant, PHP inclue une structure de contrôle qui s'applique spécialement aux tableaux. Il s'agit de la structure foreach.

La structure foreach permet de parcourir un tableau élément par élément. Elle simplifie nettement la parcours des tableaux en nous épargnant la peine de tester des indexes vides ou de connaitre le nombre d'indexes contenus.

Exemple:
<?php
   $tab=array("PHP","Coté serveur",60);
   foreach($tab as $elem){
      echo "$elem <br />";
   }
?>
Ce qui donne:

PHP
Coté serveur
60
La structure foreach accepte comme paramètres: le nom du tableau à parcourir ($tab dans ce cas), suivi du mot clé as suivi d'une variable de notre choix ($elem dans notre cas). La structure foreach parcourt le tableau élément par élément et affecte l'élément en cours à la variable $elem. Les accolades dans ce cas sont facultatives puisqu'une seule instruction est déclarée dans le bloc.

Si le tableau est associatif et on veut prendre en compte la valeur des clés alors le code ressemblera à ceci:
<?php
   $tab=array(
      "langage"=>"PHP",
      "execution"=>"Coté serveur",
      "heures"=>60
   );
   foreach($tab as $cle => $elem){
      echo "$cle: $elem <br />";
   }
?>
Ce qui donne:
langage: PHP
execution: Coté serveur
heures: 60
Dans ce cas le mot clé as est suivi de deux variables séparées par la séquence =>. La première variable désigne la clé courante et la deuxième désigne la valeur courante.

Fonctions agissant sur les tableaux

Comme pour les chaînes de caractères, les fonctions qui agissent sur les tableaux sont nombreuses et diversifiées. Cependant, nous nous contenterons des plus utiles:
  • count($tab) ou sizeof($tab): retourne un entier qui indique le nombre d'entrées du tableau.
  • in_array($var,$tab): vérifie si la variable $var existe dans le tableau. Si oui la fonction in_array() retourne true sinon elle retourne false.
  • list($var1,$var2,$var3...): affecte chacune des entrées du tableau respectivement au variables $var1, $var2, $var3...
  • shuffle($tab): mélange le contenu du tableau en changeant l'indexe des entrées aléatoirement.
  • sort($tab): trie dans l'ordre alphanumérique les éléments du tableau.
  • rsort($tab): trie dans l'ordre alphanumérique inverse les éléments du tableau.
  • array_rand($tab): retourne l'indexe de l'une des entrée du tableau aléatoirement.
  • array_merge($tab1,$tab2,$tab3...): retourne un seul grand tableau qui contient les éléments des tableaux $tab1, $tab2, $tab3...
  • implode($sep,$tab) ou join($sep,$tab): retourne une chaîne de caractères constituée des éléments du tableaux séparés par le contenu de la variable $sep.
  • explode($occ,$str): cette fonction s'applique sur les chaînes de caractères. Elle crée un tableau en éclatant la chaîne $str au niveau des occurrences $occ.

Exemples:
<?php
   $tab=array("PHP","Coté client",60);
   echo count($tab); // Affiche: 3
   
   if(in_array("PHP",$tab))
      echo "Existe";
   else
      echo "N'existe pas";
   // Affiche: Existe
   
   list($a,$b,$c)=$tab;
   echo "$a - $b - $c"; // Affiche: PHP - Coté client - 60
   
   echo implode(" - ",$tab); // Affiche: PHP - Coté client - 60
   
   echo array_rand($tab); // Affiche soit: 0, 1 ou 2
   echo $tab[array_rand($tab)]; // Affiche soit: PHP, Coté client ou 60
   
   $str="Bonjour";
   $tab=explode("o",$str);
   echo implode("*",$tab); // Affiche: B*nj*ur
?>
Quiz (Pour tester vos connaissances)
  1. Que fait le code suivant?
    $tab=array("A","B");
    echo array_rand($tab);
Affiche soit 0 soit 1
Affiche soit A soit B
  1. Soit le code suivant:
    $tab = array("Lundi","Mardi");
    $tab[]="Mercredi";
    Que vaut l'indice (implicite) de la valeur "Mercredi" dans ce cas?
1
2
3
  1. Qu'affiche le code suivant?
    $tab=array("B","nj","ur");
    echo implode("o",$tab);
B nj ur
o oo oo
Boonjoour
Bonjour
  1. Un tableau PHP doit accueillir des variable du même type.
Vrai
Faux
  1. Que retourne le code suivant?
    $tab1=array("A","B","C");
    $tab2=array(1,2,3);
    $tab=array($tab1,$tab2);
    echo count($tab);
2
3