Exercices
Questions à choix multiple

Leçon N° 05 : Tableaux

Introduction
Initialisation des tableaux
Lire un tableau avec foreach
Tableaux multidimensionnels
Les tableaux dans les chaines de caractères
Fonctions relatives aux tableaux
Notes de page

Introduction

Un tableau PHP est une variable pouvant contenir d'autres variables. C'est en fait un système d'associations ordonnées (map) qui fait correspondre des valeurs à des clés. Une clé est une valeur, unique dans une liste donnée, permettant de retrouver une valeur ou une ensemble de valeurs dans une liste (Exemple : le N° de Sécurité sosiale est une clé permettant de retrouver votre situation familliale, date et lieu de naissance...)
Comme il peut contenir des variables, c'est un aussi 'contener', qui est optimisé de façon à ce que les données qu'il contient puissent être facilement manipulées.
Comme une valeur peut elle-même être un tableau, ce système permet facilement de représenter des données sous forme d'arbres (généalogie, organigrammes...)

Initialisation des tableaux

Construire un exemple simple
Nom du fichier : exercises_05\lesson_05_a2_init_array.php
Remarque importante : Il ne peut y avoir deux clés identiques, mais deux clés différentes peuvent pointer vers deux valeurs identiques

La boucle foreach

PHP 4 (mais pas PHP 3) inclut une structure de contrôle foreach, comme en Perl ou d'autres langages. C'est un moyen simple de passer en revue les valeurs (et éventuellement les clés) d'un tableau.
Il y a deux syntaxes possibles : la seconde est une extension mineure mais pratique de la première:

<?php
foreach(array_expression as $value) commandes
foreach(array_expression as $key => $value) commandes
?>
La première forme passe en revue le tableau array_expression. A chaque itération, la valeur de l'élément courant est assignée à $value et le pointeur interne de tableau est avancé d'un élément (ce qui fait qu'à la prochaine itération, on accédera à l'élément suivant).
La deuxième forme fait exactement la même chose, mais c'est la clé de l'élément courant qui est assigné à la variable $key. Lorsque foreach démarre, le pointeur interne de fichier est automatiquement ramené au premier élément du tableau. Cela signifie que vous n'aurez pas à faire appel à reset(); avant foreach.
Note : De plus, notez que foreach travaille sur une copie du tableau spécifié, et pas sur le tableau lui-même. Par conséquent, le pointeur de tableau n'est pas modifié, comme il le serait avec le fonction each() , et les modifications faites dans le tableau ne seront pas prises en compte dans le tableau original.
Note 1 : Le fonction each(nom_de_tableu) Retourne chaque paire clé/valeur d'un tableau.
Note 2 : foreach n'accepte pas l'opérateur de supppression des erreurs @. Vous pouvez remarquer que les exemples suivants fonctionnent de manière identique :

<?php
reset($arr);
while (list(, $value) = each ($arr))
{
    echo "Valeur: $value";
}
//---------------------------------------
foreach ($arr as $value)
{
    echo "Valeur: $value";
}
?>
Remarque : list(nom_de_tableau) transforme une liste de variables en tableau
Les exemples suivants sont aussi fonctionnellement identiques :

<?php
reset($arr);
while (list($key, $value) = each ($arr))
{
    echo "Clé: $key; Valeur: $value \n";
}
//---------------------------------------
foreach ($arr as $key => $value)
{
    echo "Clé: $key; Valeur: $value \n";
}
?>
Voici quelques exemples de plus :
---------------------------------------------------
Exemple 1: valeurs seules

<?php
$a = array (1, 2, 3, 17);
foreach ($a as $v)
{
    print "Valeur courante de \$a: $v.\n";
}
?>
---------------------------------------------------
Exemple 2: valeurs (avec la clé correspondante)

<?php
$a = array (1, 2, 3, 17);
$i = 0; /* pour l'illustration uniquement */
foreach($a as $v)
{
    print "\$a[$i] => $v.\n";
}
?>
---------------------------------------------------
Exemple 3: clé et valeur

<?php
$a = array ("un" => 1,"deux" => 2,"trois" => 3,"dix-sept" => 17 );
foreach($a as $k => $v)
{
    print "\$a[$k] => $v.\n";
}
?>

---------------------------------------------------
Exemple 4: tableaux multi-dimensionnels

<?php
$a[0][0] = "a";
$a[0][1] = "b";
$a[1][0] = "y";
$a[1][1] = "z";
foreach($a as $v1)
{
    foreach ($v1 as $v2)
    {
        print "$v2\n";
    }
}
?>
---------------------------------------------------
Exemple 5: tableaux dynamique

<?php
foreach(array(1, 2, 3, 4, 5) as $v)
{
    print "$v\n";
}
?>
Executer les exemples ci-dessus
Nom du fichier : exercises_05\lesson_05_d_foreach.php
Exerices sur la boucle foreach
Nom du fichier : exercises_05\lesson_05_b_foreach.php
Construire un dictionnire des mois
Nom du fichier : exercises_05\lesson_05_c_foreach_2.php

Tableaux multidimensionnels

On les appelle tableaux multidimensionnels par analogie avec les autres langages, en fait en php les tableaux multidimensionnels n'existent pas, par contre on a la possibilité de mettre un tableau dans une cellule d'un tableau, ce qui est un concept assez fondamentalement différent. ceci provoque une bien meilleure souplesse et une meilleure utilisation de la mémoire:
Soit le tableau suivant :
$events = array("1914"=> array ("Juin" => array ("23" => "Innauguration canal de Kiev par Hitler", "28" => "Archiduc Ferdinand assassiné à Sarajevo" ) , "July" => array ("26" => "Mobilisation en Autriche", "28" => "L'Autriche déclare la guerre à la Serbie" )) , "1918" => array ( "November" => array ("11" => "Armistice signée ", "16" => "retrait des troupes allemandes"))) ;
Si l'on utilisait les tableaux multidimensionnels "standards", pour réaliser un tableau de dates comme ci-dessus, il faudrait un tableau tridimentionnel de dimensions:
nombre d'années x nombre de mois x nombre de jours
ce qui provoquerait (suivant les langages) une immobilisation mémoire importante, alors qu'ici il n'y a jamais de place perdue
Exemple de tableau multidimensionnel
Nom du fichier : exercises_05\lesson_05_d_multidimentional.php

Tableaux dans les chaines de caractères

Le mécanisme d'interpolation vu précédemment permet d'interpréter des variables placées dans des chaînes de caractères entourées de doubles apostrophes. Ce mécanisme fonctionne aussi pour les tableaux à une dimension. Pour les tableaux à deux dimensions, il faut passer par une variable intermédiaire et l'opérateur de concaténation ou mieux utiliser les accolades {}
Afficher le nombre de jours du mois en cours en utilisant les accolades
Nom du fichier : exercises_05\lesson_05_e_arrays_in_string.php

Fonctions spécifiques utilisables avec les tableaux

*FonctionDescription
array_change_key_caseRetourne un tableau dont toutes les clés ont été forcées en majuscules ou minuscules.
array_chunk Sépare un tableau en tableaux de taille inférieure
array_count_values Compte le nombre de valeurs dans un tableau
array_diff Calcule la différence entre deux tableaux
xarray_fill Remplit un tableau avec une même valeur (PHP 5)
array_filter Filtre les éléments d'un tableau
array_flip Remplace les clés par les valeurs, et les valeurs par les clés
array_intersect Calcule l'intersection de tableaux
array_key_exists Cherche si une valeur ou une clé existe dans le tableau
array_keys Retourne toutes les clés d'un tableau
array_map Applique une fonction sur des tableaux
array_merge_recursive Combine plusieurs tableaux ensembles, récursivement
array_merge Rassemble plusieurs tableaux dans un autre tableau
xarray_multisort Tri multi-dimensionnel
xarray_pad Complète un tableau jusqu'à la longueur spécifiée, avec une valeur.
array_pop Dépile un élément de la fin d'un tableau
xarray_push Empile un ou plusieurs éléments à la fin d'un tableau
array_rand Prend une ou plusieurs valeurs, au hasard dans un tableau
array_reduce Réduit itérativement un tableau
array_reverse Renverse l'ordre des éléments d'un tableau
array_search Recherche dans un tableau la clé associée à une valeur
xarray_shift Dépile (enlève) un ou plusieurs élément au début d'un tableau
array_slice Extrait une portion de tableau
array_splice Efface et remplace une portion de tableau
array_sum Calcule la somme des valeurs du tableau
array_unique Dédoublonne un tableau
xarray_unshift Empile (rajoute) un ou plusieurs éléments au début d'un tableau
array_values Retourne les valeurs d'un tableau réindexées avec des entiers
xarray_walk Exécute une fonction sur chacun des membres d'un tableau.
xarray Crée un tableau
xarsort Trie un tableau en ordre inverse
xasort Trie un tableau en ordre
xcompact Crée un tableau contenant les variables et leur valeur
count Compte le nombre d'éléments d'un tableau
xcurrent Transforme une variable en tableau
each Retourne chaque paire clé/valeur d'un tableau
end Positionne le pointeur de tableau en fin de tableau
extract Importe les variables dans la table des symboles
in_array Indique si une valeur appartient à un tableau
key Retourne une clé d'un tableau associatif
xkrsort Trie un tableau en sens inverse et suivant les clés
xksort Trie un tableau suivant les clés
xlist Transforme une liste de variables en tableau
xnatcasesort Tri d'un tableau avec l'algorithme à "ordre naturel" insensible à la casse
xnatsort Tri d'un tableau avec l'algorithme à "ordre naturel"
next Avance le pointeur interne d'un tableau
pos Retourne l'élément courant d'un tableau
prev Recule le pointeur courant de tableau
xrange Crée un tableau contenant un intervalle d'éléments
reset Remet le pointeur interne de tableau au début
xrsort Trie en ordre inverse
xshuffle Mélange les éléments d'un tableau
sizeof Retourne le nombre d'élément d'un tableau
xsort Trie le tableau
xuasort Trie d'un tableau en utilisant une fonction de comparaison définie par l'utilisateur.
xuksort Trie un tableau par ses clés en utilisant une fonction de comparaison définie par l'utilisateur
xusort Trie un tableau en utilisant une fonction de comparaison définie par l'utilisateur
is_array() Pour savoir si une variable est un tableau
xexplode()array explode ( string separator, string string [, int limit])
Retourne un tableau qui contient les éléments d'une chaîne contenant des délimiteurs
ximplode()string implode ( string glue, array pieces)
Retourne une chaîne constituée de tous les éléments du tableau, pris dans l'ordre, transformés en chaîne, et séparés par le séparateur
xsplit() array split ( string pattern, string string [, int limit])
Scinde une chaîne en un tableau, grâce à une expression régulière.
xjoin()string join ( string glue, array pieces)
Regroupe tous les éléments d'un tableau dans une chaîne, avec une chaîne de jointure.
* : le x signifie que la fonction modifie le(s) tableau(x) spécifié en argument, sinon en principe c'est un nouveau tableau qui est créé
Exemples d'utilisations de fonctions : afficher dans un string, mélanger, trier
Nom du fichier : exercises_05\lesson_05_f_arrays_functions.php
Exemples d'utilisations de la fonction list
Nom du fichier : exercises_05\lesson_05_g_list.php
Autres exemples :
Un grand nombre de fonctions sont disponibles pour faire des opérations sur des tableaux :
Par exemple,
Exercices Niveau 2 :
Création de la table pour l'exercice
Trier un groupe de tableaux à partir d'un des tableaux du groupe 1ière méthode
Nom du fichier : exercises_05\lesson_05_d1.php
Tri de tableaux multidimensionnels
Nom du fichier : exercises_05\lesson_05_d2.php

Tous droits réservés. 2005-2008