Tableaux Array

Vous êtes ici : >> PHP / Tableaux Array
Temps d'étude : 1h. Niveau : Moyen.
Tags : Tableaux Array
Fichier(s) utile(s) pour ce cours : /

Array

Une variable Array (appelée aussi tableau de données, ou tableau array) est une sorte variable améliorée, car elle nous permet de conserver en mémoire un ensemble de valeurs (et non pas qu'une seule valeur comme dans le cas d'une variable classique).

1 variable = 1 valeur

1 array = plusieurs valeurs

Exemple avec 1 variable classique :
entrainement.php
	<?php
	$prenom = "Nicolas";
	echo "

Bonjour $prenom

";
Résultat

Bonjour Nicolas


Jusque là, tout est normal, 1 variable peut conserver 1 valeur.
Si vous tentez de mettre plusieurs valeurs cela ne sera pas de bon augure :

entrainement.php
	<?php
	$prenom = "Nicolas, Marie, Grégoire, Sylvain, Celine";
	echo "

Bonjour $prenom

";
Résultat

Bonjour Nicolas, Marie, Grégoire, Sylvain, Celine


Au moment de l'affichage via l'instruction echo nous ne pouvons pas choisir d'afficher 1 seul prénom, c'est donc toute la liste qui s'affiche. Ce qui montre bien qu'une variable n'est pas faite pour conserver plusieurs valeurs.

Notre premier array : une liste de prenom

entrainement.php
	<?php
	$listePrenom = array("gregoire","nathalie","emilie","françois","georges"); 

Nous déclarons notre variable à peu près comme d'habitude à une exception près, nous utilisons le mot-clé array.

Si nous souhaitons voir l'ensemble des valeurs contenues dans notre variable array, nous pouvons utiliser l'instruction print_r :

entrainement.php
	<?php
	$listePrenom = array("gregoire","nathalie","emilie","françois","georges");
	echo '
'; print_r($listePrenom); echo '
';

Nous ajoutons les balises html <pre> autour du print_r afin que les informations soient affichées de ligne en ligne.

print_r est une instruction d'affichage améliorée permettant de voir le contenu d'un tableau array.

var_dump est similaire à print_r avec des options supplémentaires comme le type et la taille de la valeur contenue dans notre tableau array.

entrainement.php
	<?php
	$listePrenom = array("gregoire","nathalie","emilie","françois","georges");
	echo '
'; print_r($listePrenom); echo '
'; var_dump($listePrenom);

Résultat
Avec print_r :
Array
(
    [0] => gregoire
    [1] => nathalie
    [2] => emilie
    [3] => françois
    [4] => georges
)

Avec var_dump :
array(5) { [0]=> string(8) "gregoire" [1]=> string(8) "nathalie" [2]=> string(6) "emilie" [3]=> string(9) "françois" [4]=> string(7) "georges" }
Avec une représentation plus compréhensible :

clé valeur
0 gregoire
1 nathalie
2 emilie
3 françois
4 georges

Le dernier résultat (sous forme de représentation) est légérement retouché afin de faciliter votre compréhension, il n'apparaitra pas aussi nettement sous forme de tableau sur votre page web.

La variable array crée automatiquement des clés (aussi appelées indices) et range les valeurs à l'intérieur d'elle même.

Il y a bien 5 prénoms, de 0 a 4.

Par conséquent, si nous voulons afficher le prénom "émilie", nous passerons par la clé n°2. Exemple :

entrainement.php
	<?php
	$listePrenom = array("gregoire","nathalie","emilie","françois","georges");
	echo '
'; print_r($listePrenom); echo '
'; echo $listePrenom[2] . '
';

Résultat

emilie


Nous pouvons également affecter des valeurs dans un tableau array au coup par coup (pratique lorsque nous n'avons pas toutes les valeurs sous la main immédiatement), exemple :

entrainement.php
	<?php
	$listePays[] = 'France';
	$listePays[] = 'Italie';
	$listePays[] = 'Espagne';
	$listePays[] = 'Angleterre';
	echo "
"; print_r($listePays); echo "
";
Résultat
Avec print_r
Array
(
    [0] => France
    [1] => Italie
    [2] => Espagne
    [3] => Angleterre
)

Sous forme de représentation :

clé valeur
0 France
1 Italie
2 Espagne
3 Angleterre

Exercice, pourriez-vous afficher la valeur Italie en passant par votre tableau $listePays ?

Voici la correction :

entrainement.php
	<?php
	$listePays[] = 'France';
	$listePays[] = 'Italie';
	$listePays[] = 'Espagne';
	$listePays[] = 'Angleterre';
	echo "
"; print_r($listePays); echo "
"; echo $listePays[1] . '
';
Résultat

Italie


Et si nous voulions afficher tous les pays d'un seul coup ?

Nous pourrions utiliser la fonction implode. Exemple :

entrainement.php
	<?php
	$listePays[] = 'France';
	$listePays[] = 'Italie';
	$listePays[] = 'Espagne';
	$listePays[] = 'Angleterre';
	echo "
"; print_r($listePays); echo "
"; echo $listePays[1] . '
'; echo implode($listePays, '
');
implode permet d'extraire les valeurs d'un tableau array, cette fonction attends 2 arguments, 1 array à explorer et 1 séparateur (ce qui permettra de séparer les valeurs une fois extraites).

implode est l'une des rares fonctions à ne pas respecter d'importance dans l'ordre des arguments (on peut mettre le array à explorer en premier ou en 2e. Idem pour le séparateur du coup).

Résultat

France

Italie

Espagne

Angleterre


Nous aurions également pu utiliser une boucle.

Parcourrir un tableau array avec la boucle for

entrainement.php
	<?php
	for($i = 0; $i < sizeof($listePays); $i++)
	{
		echo $listePays[$i] . '
'; }
La fonction prédéfinie sizeof ou la fonction prédéfinie count permettent de connaitre la taille totale d'un tableau (dans notre cas, il y a 4 pays, donc nous arreterons de faire des tours de boucles a 4 soit 0, 1, 2 et 3).

pour des raisons de performances il serait préférable de compter dans une variable hors de la boucle (pour éviter que le calcul soit refait à chaque tour). Pour le moment, je ne cherche pas à faire une version de code optimisée mais fonctionnelle dans la mesure où l'on débute en php.

Comment cette boucle fonctionne ?

Nous demandons à $listePays de s'afficher et nous devons préciser le numéro d'une clé (ou indice), pour cela nous choisissons $i qui sera progressif.

Au tour de boucle 0, $i sera à 0, ce qui donnera echo $listePays[0] et donc affichera "France".

Au tour de boucle 1, $i sera à 1, ce qui donnera echo $listePays[1] et donc affichera "Italie".

Au tour de boucle 2, $i sera à 2, ce qui donnera echo $listePays[2] et donc affichera "Espagne".

Au tour de boucle 3, $i sera à 3, ce qui donnera echo $listePays[3] et donc affichera "Angleterre".

Résultat

France

Italie

Espagne

Angleterre


Une boucle est particulièrement adaptée pour parcourir les éléments d'un array, il s'agit de la boucle foreach puisqu'il ne sera pas nécessaire de lui fournir un numéro.

Parcourir un tableau array avec la boucle foreach

entrainement.php
	<?php
	foreach($listePays as $cle => $valeur)
	{
		echo "$cle - $valeur 
"; }
Résultat

0 - France

1 - Italie

2 - Espagne

3 - Angleterre


Dans la boucle (et dans le echo) les variables $cle et $valeur auraient pu être nommées $x et $y, leur nom n'a pas d'importance.
L'ordre représente la manière dans laquelle les colonnes seront parcourues : 1ère variable pour la colonne "clé" et 2e variable pour la colonne "valeur".

explication PHP

le mot clé "as" et symbole "=>" sont quant à eux prédéfinis dans le langage, il faut les respecter, c'est une régle de syntaxe lorsqu'on utilise la boucle foreach.

La boucle foreach est prévue pour s'arreter toute seule lorsqu'il n'y a plus d'éléments à parcourir dans le tableau array.

C'est quand même bien pratique !

Choisir les clés (indices) et créer un tableau array associatif

Il est possible de choisir les clés d'un array (plutôt qu'avoir une numérotation classique), nous appelons cela un tableau array associatif.

Exemple :

entrainement.php
	$couleur = array("j" => "jaune", "b" => "bleu", "v" => "vert"); 
	echo '
'; print_r($couleur); echo '
';
Résultat
Avec print_r :
Array
(
    [j] => jaune
    [b] => bleu
    [v] => vert
)
Sous forme de représentation :

clé valeur
j jaune
b bleu
v vert

Avec des clés lettrées (non numérique), nous atteindrons les éléments du tableau array de cette manière-là :

entrainement.php
	$couleur = array("j" => "jaune", "b" => "bleu", "v" => "vert"); 
	echo '
'; print_r($couleur); echo '
'; echo $couleur['j'] . '
' . $couleur['b'] . '
' . $couleur['v'] . '
';

Comme vous pouvez l'apercevoir, nous mettons des lettres entre crochet [] et non pas des numéros afin d'atteindre les éléments par leur clés.

Résultat

jaune

bleu

vert

Régle d'écriture pour tableau ARRAY

Pour l'array suivant :

entrainement.php
		$listeFruit = array("fruit1" => "orange","fruit2" =>  "pomme", "fruit3" =>  "fraise");
		echo '
'; print_r($listeFruit); echo '
';

Cela donne le résultat suivant :

Résultat
Avec print_r :
Array
(
    [fruit1] => orange
    [fruit2] => pomme
    [fruit3] => fraise
)
Sous forme de représentation :

clé valeur
fruit1 orange
fruit2 pomme
fruit3S fraise
entrainement.php
		$listeFruit = array("fruit1" => "orange","fruit2" =>  "pomme", "fruit3" =>  "fraise"); // déclaration array
		echo 'fruit1 : ' . $listeFruit['fruit1'] . '
'; // quotes dans les crochets echo "fruit1 : $listeFruit[fruit1]
"; // pas de quotes dans les crochets

Régle d'écriture à connaitre : lorsque nous affichons un élément dans un array associatif (avec des clés (indices) lettrées) il faut le faire soit avec de la concaténation et des quotes (ou guillemets) DANS les crochets.

Ou alors, nous pouvons aussi réaliser la totalité de l'affichage entre guillemets à condition de ne pas mettre de quotes ou guillemets dans les crochets.

L'option consistant à écrire la totalité de l'affichage entre guillemets et sans caractère quotes ou guillemets dans les crochets fonctionne pour les array simple mais pas pour les array multidimensionnels

Tableaux array Multidimensionnels

Il est possible de créer des tableaux array à l'intérieur d'autres tableaux array, lorsqu'une imbrication de tableau array est faite, nous parlons de tableaux array multidimensionnels (en gros, il y a plusieurs dimensions).

Plus simplement, un tableau multidimensionnel désigne un ou plusieurs tableaux à l’intérieur d’un tableau principal .

Exemple :

entrainement.php
	<?php
	$tabMultidimensionnel = array(0 => array("prenom" => "Julien", "nom" => "Cottet"), 1 => array("prenom" => "Nicolas", "nom" => "Lafaye"));
	echo '
'; print_r($tabMultidimensionnel); echo '
';
Résultat
Array
(
    [0] => Array
        (
            [prenom] => Julien
            [nom] => Cottet
        )

    [1] => Array
        (
            [prenom] => Nicolas
            [nom] => Lafaye
        )

)

explication PHP

Si nous voulions sortir le prénom "Julien" en passant par notre tableau, nous devrions faire suivre plusieurs crochets :

entrainement.php
	<?php
	$tabMultidimensionnel = array(0 => array("prenom" => "Julien", "nom" => "Cottet"), 1 => array("prenom" => "Nicolas", "nom" => "Lafaye"));
	echo $tabMultidimensionnel[0]['prenom'];
Résultat

Julien


Lors de l'utilisation des tableaux ARRAY, il est possible d'indexer les clés numériquement mais aussi de façon "associative" (autrement dit, avec 1 nom). Lorsque c'est possible, les développeurs utilisent et préfèrent l'indexation "associative" (nominative) afin de pouvoir donner des noms de clés clairs et ayant du sens.

J'espère que ce chapitre est clair pour vous ! sinon n'hésitez pas à le relire autant de fois que nécessaire !