Un tableau PHP est en fait une association ordonnée (map). Une association est un type qui fait correspondre des valeurs à des clés. Ce type est optimisé de diverses façons, qui font que vous pouvez le manipuler comme un tableau à indices réels, une liste (vecteur), ou un table de hachage (qui est une implémentation d'association), dictionnaire, collection, pile, queue et encore d'autres. Comme une valeur peut elle-même être un tableau, vous pouvez simuler facilement un arbre.
Les détails d'implémentation de ces structures sont hors du champs de ce manuel, mais vous trouverez ici un exemple de toutes ces structures.
Un tableau array peut être créé avec la fonction array(). Cette fonction prend en argument des structures key => value, séparées par des virgules.
array( [key =>] value , ... ) // key est soit une string soit un integer positif // value peut être n'importe quoi |
Une clé key est soit un entier ou bien une chaîne. Si une clé est la représentation standard d'un entier positif, elle sera interprétée comme tel. (i.e. '8' sera interprété comme 8, tandis que '08' sera interprété comme '08').
Une valeur peut être n'importe quoi.
Si vous omettez une clé lors de la spécification d'un tableau, l'indice maximum + 1 sera utilisé comme clé par défaut. Si aucun indice numérique n'a été généré, ce sera 0. Si vous en spécifiez une qui a déjà été assignée, la nouvelle valeur écrasera la précédente.
<?php // Ce tableau est identique à array(5 => 43, 32, 56, "b" => 12); // Celui ci array(5 => 43, 6 => 32, 7 => 56, "b" => 12); ?> |
Utiliser TRUE comme clé revient à utiliser le type integer de valeur 1. Utiliser FALSE comme clé revient à utiliser le type integer de valeur 0. Utiliser NULL comme clé revient à utiliser le type string de valeur "". Utiliser la chaîne vide comme index va créer cet index, et ce n'est pas la même chose que d'utiliser des crochets vides.
Il n'est pas possible d'utiliser des tableaux ou des objets comme clés. Ce faisant, vous généreriez une alerte : Illegal offset type.
Vous pouvez aussi modifier un tableau existant en lui assignant simplement des valeurs.
L'assignation de valeurs de tableau se fait en spécifiant la clé entre crochets. Si vous omettez la clé ("$tableau[]"), la valeur sera ajoutée à la fin du tableau.
$arr[key] = value; $arr[] = value; // key est soit une chaîne, soit un entier // value peut être n'importe quoi |
Il y a toute une panoplie de fonctions pratiques pour travailler avec les tableau : array-functions.
Note : La fonction unset() permet d'effacer des index dans un tableau. Sachez bien que le tableau ne sera PAS réindexé. Si vous utilisez uniquement des index numériques (commençant à zéro, et incrémentés de un), vous pouvez effectuer la réindexation en utilisant array_values().
Exemple 7-14. Manipuler des éléments de tableau
<?php $a = array(1 => 'un', 2 => 'deux', 3 => 'trois'); unset($a[2]); /* Cela va produire un tableau qui aurait été $a = array(1 => 'un', 3 => 'trois'); et non pas $a = array(1 => 'un', 2 =>'trois'); */ $b = array_values($a); // Maintenant b est le tableau array(1 => 'un', 2 =>'trois') ?>
L'élément de langage foreach est spécifiquement dédié aux tableaux : il permet de passer en revue simplement les valeurs d'un tableau.
Dans vos vieux scripts, vous pouvez avoir utilisé la syntaxe suivante :
Cela est mauvais, mais ca marche. Pourquoi est-ce mauvais? La raison est que PHP attend une constante entre crochets (bar) plutôt qu'une chaîne ('bar', notez les guillemets). Or, PHP pourrait définir dans le futur des constantes qui, malheureusement pour votre code, auront ce nom. Actuellement, cela fonctionne car la constante indéfinie est transformée en chaîne ayant la même valeur.D'autres exemples :
Exemple 7-15. Exemples de conflits de constantes indéfinies
|
Lorsque vous activez le error_reporting() pour afficher les erreurs de niveau E_NOTICE (en utilisant le niveau E_ALL) alors, vous verrez ces erreurs. Par défaut, error_reporting est trop faible pour les afficher.
Comme indiqué dans la section syntaxe, il doit y avoir une expression entre les crochets ('[' and ']'). Cela signifie que vous pouvez écrire ceci :
Ceci est un exemple d'utilisation de retour de fonction comme index de tableau. PHP reconnait aussi les constantes, comme la famille des E_*.<?php $error_descriptions[E_ERROR] = "Une erreur fatale est survenue"; $error_descriptions[E_WARNING] = "PHP émet une alerte"; $error_descriptions[E_NOTICE] = "Ceci est juste une alerte informationnelle"; ?> |
<?php $error_descriptions[1] = "Une erreur fatale est survenue"; $error_descriptions[2] = "PHP émet une alerte"; $error_descriptions[8] = "Ceci est juste une alerte informationnelle"; ?> |
Comme nous l'avons déjà expliqué dans les exemples ci-dessus, $foo[bar] fonctionne mais est dangereux. Cela fonctionne car bar est identifié comme une constante. Mais, si la constante n'existe pas, PHP suppose que vous souhaitez utiliser bar litteralement, sous la forme "bar", mais que vous avez oublié les guillemets.
A l'avenir, la PHP team peut décider d'ajouter une constante ou un autre mot clé, ou bien vous souhaiterez aussi ajouter une constante dans votre application, et vous serez bloqué. Par exemple, vous ne pouvez pas utiliser des mots comme empty et default de cette manière, car il sont déjà réservés.
Note : Pour insister, à l'intérieur d'une chaîne de caractères (string) à guillemets doubles, il est correct de ne pas utiliser les guillemets simples dans les index, et "$foo[bar]" est valide. Voyez les exemples ci-dessus pour plus de détails sur la syntaxe des variables dans les chaînes.
Pour les types scalaires (integer, float, string, boolean et resource), convertir une valeur en tableau retourne un tableau qui contient un élément (à l'index 0) qui est la valeur originale.
Si vous convertissez un tableau en objet, vous obtiendrez des propriétés ou bien cet objet comme élements de tableau. Les clés créées sont les noms des membres.
Si vous convertissez la valeur NULL en tableau, vous obtiendrez un taleau vide.
Le type tableau de PHP est très souple. Voici quelques exemples d'utilisation :
<?php // ceci $a = array( 'couleur' => 'rouge' , 'gout' => 'sucre' , 'forme' => 'rond' , 'nom' => 'pomme' , 4 // cette clé sera 0 ); // est complétement équivalent à $a['couleur'] = 'rouge'; $a['gout'] = 'sucre'; $a['forme'] = 'rond'; $a['nom'] = 'pomme'; $a[] = 4; // cette clé sera 0 $b[] = 'a'; $b[] = 'b'; $b[] = 'c'; // va créer le tableau array( 0 => 'a' , 1 => 'b' , 2 => 'c' ) // ou plus simplement array('a' , 'b' , 'c' ) ?> |
Exemple 7-16. Utilisation de array()
|
Notez qu'il n'est pas possible actuellement de modifier les valeurs d'un tableau avec une telle boucle. Une solution pour cela est :
Cet exemple crée un tableau d'index minimal 1.
Les tableaux sont ordonnés. Vous pouvez modifier l'ordre des valeurs avec de nombreuses fonctions de classement. Voyez les fonctions de tableaux.
Comme une valeur de tableau peut être n'importe quoi, elle peut aussi être un autre tableau. Comme cela, vous pouvez avoir des tableaux multi-dimensionnels, ou récursifs.
Exemple 7-22. Tableaux multi-dimensionnels, et récursifs
|
Précédent | Sommaire | Suivant |
Les chaînes de caractères | Niveau supérieur | Les objets |