Aller au contenu

Introduction aux Tableaux en PHP

Les tableaux sont des structures de données qui permettent de stocker plusieurs valeurs dans une seule variable. Ils sont particulièrement utiles pour gérer des listes de données ou des collections d'éléments.

Création d'un Tableau

Pour créer un tableau en PHP, vous pouvez utiliser la fonction array() ou la syntaxe courte [].

<?php
// Utilisation de la fonction array()
$livres = array("1984", "Le Petit Prince", "L'Étranger", "Harry Potter", "Les Misérables");

// Utilisation de la syntaxe courte
$livres = ["1984", "Le Petit Prince", "L'Étranger", "Harry Potter", "Les Misérables"];

Autre exemple d'affectation de valeurs dans un tableau en PHP:

<?php
    $tab[] = 22;
    $tab[2] = "Toto";
    $tab[] = 26.0;
    $tab['quatre'] = 10;

    echo var_dump($tab);

représentation tableau

Que constatez-vous par rapport à Java ?

Similitude avec Java

  • La syntaxe d'accès à l'élément d'indice 'i' est la même : $nomTableau[i]

  • En PHP, il est possible également d'utiliser des accolades ($nomTableau{i}) au lieu de crochets. Cependant, préférez utiliser les crochets par similitude avec la plupart des langages de programmation.

Différences avec Java

  • Pas de déclaration préalable nécessaire,

  • Plusieurs types de valeurs différents peuvent être placés dans le même tableau,

  • La taille du tableau est dynamique,

  • Les indices du tableau ne sont pas forcément des entiers,

  • Les indices ne sont pas obligatoirement successifs

Accéder aux Éléments d'un Tableau

Vous pouvez accéder aux éléments d'un tableau indicé en utilisant leur index. Les index commencent à 0.

<?php
echo $livres[0]; // Affiche "1984"
echo $livres[3]; // Affiche "Harry Potter"

Ajouter des Éléments à un Tableau

Pour ajouter des éléments à un tableau, vous pouvez utiliser la syntaxe suivante :

<?php
$livres = ["1984", "Le Petit Prince", "L'Étranger", "Harry Potter", "Les Misérables"];
$livres[] = "Hanger games";
$livres[3] = "Les 7 soeurs";
$livres[] = "Le labyrinthe";
A votre avis, où s'ajoutent les différentes entrées ?

array(7) {

[0]=> string(4) "1984"

[1]=> string(15) "Le Petit Prince"

[2]=> string(11) "L'Étranger"

[3]=> string(12) "Les 7 soeurs"

[4]=> string(15) "Les Misérables"

[5]=> string(12) "Hanger games"

[6]=> string(13) "Le labyrinthe"

}

Les différents types de tableaux

Tableaux indicés

Un tableau indicé est un tableau où les indices sont numériques, peu importe qu'ils soient consécutifs ou non.

  • Les indices sont des valeurs numériques,

  • Les indices ne pas forcément successifs

Exemple
<?php
    $tab_indice = array(2,4,6,8,10);
    $autre_tab_indice = array(1 => 2, 3 => 4, 5 => 6, 7 => 8, 9 => 10);
Quelle valeur est contenue dans $autre_tab_indice[3]?

4

Quelle valeur est contenue dans $autre_tab_indice[2] ?

Exception, cet indice n'existe pas dans le tableau !

Tableaux Associatifs

Les tableaux associatifs utilisent des clés nommées pour accéder à leurs éléments.

  • Les indices sont des chaines de caractères,

  • Les indices ne sont pas forcément triés par ordre alphabétique

<?php
$age = array("Pierre" => 35, "Paul" => 37, "Jacques" => 43);

// Accéder à un élément
echo $age["Pierre"]; // Affiche 35

Tableaux Mixtes

Ce sont les tableaux qui utilisent des indices tant entiers que chaines de caractères.

En général, ce type de tableau est déconseillé pour la compréhension du code.

<?php
    $var = 42;
    $tab_mixte = array(3, 'petits' => 1, 'cochons' => 0, "2*21" => $var);

Parcourir un Tableau

La longueur d'un tableau

La longueur d'un tableau est obtenue par count().

<?php
$livres = ["1984", "Le Petit Prince", "L'Étranger", "Harry Potter", "Les Misérables"];
echo 'Vous possédez '.count($livres). ' livres';
//echo 'Vous possédez '.sizeof($livres). ' livres';

La fonction sizeof() est un alias de count(); elle exécute donc le même code tout en étant que son appel nécessite d'interpréter l'alias, ce qui entraîne une perte de temps.

Privilégiez donc l'usage de count() au lieu de sizeof().

Différentes techniques de parcours d'un tableau

Boucle for

<?php
$livres = ["1984", "Le Petit Prince", "L'Étranger", "Harry Potter", "Les Misérables"];

for($cpt = 0 ; $cpt < count($livres); $cpt++){
    echo $livres[$cpt].'<br>';
}
Expérience

Quel résultat le code suivant va-t-il donner ?

<?php
$tab[] = 22;
$tab[2] = "Toto";
$tab[] = 26.0;
$tab['quatre'] = 10;

for($i=0; $i < count($tab); $i++) {
    echo $tab[$i], '<br>';
}

?>

Solution

Exception générée du au fait que les indices ne sont pas successifs ! Cette technique ne peut fonctionner que pour un tableau indicé dont on est certain que les indices se suivent !

Boucle while

<?php
$livres = ["1984", "Le Petit Prince", "L'Étranger", "Harry Potter", "Les Misérables"];

$i = 0;
while(isset($livres[$i])) {
    echo $livres[$i], '<br>';
    $i+=1;
}
Expérience

Quel résultat le code suivant va-t-il donner ?

<?php
$tab[] = 22;
$tab[2] = "Toto";
$tab[] = 26.0;
$tab['quatre'] = 10;

$i = 0;
while(isset($tab[$i])) {
    echo $tab[$i], '<br>';
    $i+=1;
}

?>

Solution

Grâce à "isset", aucune exception n'est générée pour un indice inexistant. Par contre, le parcours s'arrête dès le premier indice inexistant. Les indices de type chaine ne sont jamais pris en compte.

Boucle foreach

<?php
$livres = ["1984", "Le Petit Prince", "L'Étranger", "Harry Potter", "Les Misérables"];

foreach ($livres as $livre) {
    echo $livre . '<br>';
}
Expérience

Quel résultat le code suivant va-t-il donner ?

<?php
$tab[] = 22;
$tab[2] = "Toto";
$tab[] = 26.0;
$tab['quatre'] = 10;

foreach($tab as $t) {
    echo $t, '<br>';
}

?>

Solution

Chaque valeur du tableau est bien parcourue. Par contre, au sein de la boucle il est impossible de connaître l'indice correspondant à la valeur courante. C'est donc une très bonne méthode de parcours si le tableau ne doit pas être modifié. Cette méthode fonctionne quel que soit le type de tableau.

Expérience

Quel résultat le code suivant va-t-il donner ?

<?php
$tab[] = 22;
$tab[2] = "Toto";
$tab[] = 26.0;
$tab['quatre'] = 10;

foreach($tab as $i => $t) {
    echo "[$i] = $t", '<br>';
}

?>

Solution

Chaque valeur est bien parcourue et au sein de la boucle, l'élément courant du tableau pourrait également être modifié grâce à l'indice $i.

Les tableaux multidimensionnels

Un tableau multidimensionnel est un tableau à une dimension dont un ou plusieurs éléments sont eux-mêmes des tableaux multidimensionnels ou non.

En Java, tous les sous-tableaux ont la même dimension lors de la déclaration du tableau multidimensionnel. Bien sûr, il est possible par la suite d'affecter des sous-tableaux de tailles différentes.

En PHP, cette contrainte n'existe pas; il faut donc s'assurer de la présence d'un sous-tableau avec la fonction "is_array" et tenir compte de la taille variable du sous-tableau.

Exemple 1
<?php

$etudiants = [
    ["Alice", 22, "Bruxelles"],
    ["Bob", 25, "Liège"],
    ["Charlie", 20, "Namur"]
];

// Accéder aux données
echo $etudiants[0][0]; // Alice
echo $etudiants[1][2]; // Liège

// Parcours du tableau

foreach ($etudiants as $index => $etudiant) {
    echo "<br>Étudiant " . ($index + 1) . " :<br>";
    foreach ($etudiant as $valeur) {
        echo " $valeur ";
    }
    echo "<br>";
}

$etudiants est un tableau indexés contenant 3 éléments. Ceux-ci sont eux-mêmes des tableaux indexés.

Exemple 2
<?php
$etudiants = [
    ["nom" => "Alice", "age" => 22, "ville" => "Bruxelles"],
    ["nom" => "Bob", "age" => 25, "ville" => "Liège"],
    ["nom" => "Charlie", "age" => 20, "ville" => "Namur"]
];

// Accéder aux données
echo $etudiants[1]["nom"]; // Bob

foreach ($etudiants as $index => $etudiant) {
    echo "Étudiant " . ($index + 1) . " :<br>";
    foreach ($etudiant as $cle => $valeur) {
        echo " - $cle : $valeur<br>";
    }
    echo "<br>";
}

$etudiants est un tableau indexé contenant 3 éléments. Chaque élément est un tableau associatif regroupant les informations d’un étudiant (nom, âge, ville).

Exemple 3
<?php
$etudiants = [
    "Alice" => ["age" => 22, "ville" => "Bruxelles"],
    "Bob"   => ["age" => 25, "ville" => "Liège"],
    "Charlie" => ["age" => 20, "ville" => "Namur"]
];

// Accéder aux données
echo $etudiants["Alice"]["ville"]; // Bruxelles


foreach ($etudiants as $nom => $infos) {
    echo "Étudiant : $nom<br>";
    foreach ($infos as $cle => $valeur) {
        echo " - $cle : $valeur<br>";
    }
    echo "<br>";
}

$etudiants est un tableau associatif où chaque clé correspond au nom d’un étudiant. Chaque valeur associée est un tableau associatif contenant les informations de l’étudiant (âge, ville).