Syntaxe d'un tableau
Un tableau peut être créé en utilisant la structure de langage
array(). Il prend un nombre illimité de paramètres,
chacun séparé par une virgule, sous la forme d'une paire
key =>
value.
array(
key => value,
key2 => value2,
key3 => value3,
...
)
La virgule après le dernier élément d'un tableau
est optionnelle et peut ne pas être ajoutée. C'est généralement ce qui
est fait pour les tableaux sur une seule ligne, i.e.
array(1, 2) est préféré à array(1, 2, ).
Pour les tableaux sur plusieurs lignes, la virgule finale est généralement
utilisée, car elle permet d'ajouter plus facilement de nouveaux éléments à
la fin.
Depuis PHP 5.4, vous pouvez également utiliser la syntaxe courte,
qui remplace array() par [].
Exemple #1 Un tableau simple
<?php
$array = array(
"foo" => "bar",
"bar" => "foo",
);
// depuis PHP 5.4
$array = [
"foo" => "bar",
"bar" => "foo",
];
?>
La clé key peut être soit un integer,
soit une chaîne de caractères. La valeur value peut être
de n'importe quel type.
De plus, les modifications de type suivantes surviendront pour la clé key :
-
Les chaînes de caractères contenant un entier valide seront modifiées en un type
entier. I.e. la clé "8" sera actuellement stockée comme
l'entier 8. D'un autre côté, "08" ne sera
pas modifié, sachant que ce n'est pas un entier décimal valide.
-
Les nombres à virgule flottante seront aussi modifiés en entier, ce qui signifie
que la partie après la virgule sera tronquée. I.e. la clé 8.7
sera stockée sous l'entier 8.
-
Les booléens seront modifiés en entier également, i.e. la clé
true sera stockée sous l'entier 1
et la clé false sous l'entier 0.
-
La valeur Null sera modifiée en une chaîne vide, i.e. la clé
null sera stockée sous la chaîne de caractère "".
-
Les tableaux et les objets ne peuvent pas être utilisés comme clé.
Si vous le tentez, l'alerte suivante sera émise : Illegal offset type.
Si plusieurs éléments dans la déclaration d'un tableau utilisent la même clé,
seule la dernière sera utilisée, écrasant ainsi toutes les précédentes.
Exemple #2 Exemple sur la modification de type et l'écrasement
<?php
$array = array(
1 => "a",
"1" => "b",
1.5 => "c",
true => "d",
);
var_dump($array);
?>
L'exemple ci-dessus va afficher :
array(1) {
[1]=>
string(1) "d"
}
Vu que toutes les clés de l'exemple ci-dessus sont modifiées en l'entier
1, la valeur sera écrasée sur chaque nouvel élément,
et seul le dernier dont la valeur assignée est "d" sera
conservé.
Les tableaux PHP peuvent contenir des clés de type
integer et string en même temps,
vu que PHP ne distingue pas les tableaux indexés et les tableaux associatifs.
Exemple #3 Exemple avec des clés de type integer et string
<?php
$array = array(
"foo" => "bar",
"bar" => "foo",
100 => -100,
-100 => 100,
);
var_dump($array);
?>
L'exemple ci-dessus va afficher :
array(4) {
["foo"]=>
string(3) "bar"
["bar"]=>
string(3) "foo"
[100]=>
int(-100)
[-100]=>
int(100)
}
La clé key est optionnelle. Si elle n'est
pas spécifiée, PHP utilisera un incrément de la dernière clé entière utilisée.
Exemple #4 Tableaux indexés sans clé
<?php
$array = array("foo", "bar", "hello", "world");
var_dump($array);
?>
L'exemple ci-dessus va afficher :
array(4) {
[0]=>
string(3) "foo"
[1]=>
string(3) "bar"
[2]=>
string(5) "hello"
[3]=>
string(5) "world"
}
Il est possible de spécifier la clé seulement pour quelques éléments
et ne pas la fournir pour d'autres :
Exemple #5 Exemple avec des clés seulement pour quelques éléments
<?php
$array = array(
"a",
"b",
6 => "c",
"d",
);
var_dump($array);
?>
L'exemple ci-dessus va afficher :
array(4) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
[6]=>
string(1) "c"
[7]=>
string(1) "d"
}
Comme vous pouvez le voir, la dernière valeur "d"
a été assignée à la clé 7. Ceci est du au fait que
le dernier entier le plus grand utilisé auparavant était 6.
Accès aux éléments d'un tableau en utilisant la syntaxe à base
de crochets
Les éléments d'un tableau peuvent être accédés en utilisant
la syntaxe array[key].
Exemple #6 Accès aux éléments d'un tableau
<?php
$array = array(
"foo" => "bar",
42 => 24,
"multi" => array(
"dimensional" => array(
"array" => "foo"
)
)
);
var_dump($array["foo"]);
var_dump($array[42]);
var_dump($array["multi"]["dimensional"]["array"]);
?>
L'exemple ci-dessus va afficher :
string(3) "bar"
int(24)
string(3) "foo"
Note:
Les accolades et les crochets peuvent être utilisés pour accéder
aux éléments d'un tableau (i.e. $array[42] et
$array{42} feront exactement la même chose dans
l'exemple ci-dessus).
Depuis PHP 5.4, il est possible de faire référence à un tableau résultant
d'une fonction ou d'une méthode directement. Avant, cela n'était possible
qu'en utilisant une variable temporaire.
Depuis PHP 5.5, il est possible de déréférencer un tableau littéral.
Exemple #7 Faire référence à un tableau à la sortie d'une fonction ou d'une méthode
<?php
function getArray() {
return array(1, 2, 3);
}
// Depuis PHP 5.4
$secondElement = getArray()[1];
// Avant PHP 5.4
$tmp = getArray();
$secondElement = $tmp[1];
// ou
list(, $secondElement) = getArray();
?>
Note:
Une tentative d'accès à une clé d'un tableau qui n'a pas été définie
revient à tenter d'accès à une variable non définie : une alerte de
niveau E_NOTICE sera émise, et le résultat vaudra
NULL.
Création/modification avec des crochets
Un tableau existant peut être modifié en y assignant explicitement des valeurs.
L'assignation d'une valeur dans un tableau est effectué en spécifiant
la clé, entre crochets. La clé peut également ne pas être renseignée, sous
la forme : [].
$arr[clé] = valeur;
$arr[] = valeur;
// clé peut être un entier ou une chaîne de caractères
// valeur peut être n'importe quel type
Si $arr n'existe pas lors de l'assignation, il sera
créé ; c'est ainsi une façon détournée de créer un tableau. Cette pratique
est cependant découragée car si $arr contient déjà
quelques valeurs (i.e. string depuis la variable demandée)
alors cette valeur restera en place et [] peut attendre
un opérateur d'accès
sur une chaîne. C'est toujours un meilleur choix que d'initialiser
une variable par assignement direct.
Pour modifier une valeur en particulier, il convient d'assigner une valeur en spécifiant
sa clé. Pour effacer une paire clé/valeur, il convient d'appeler la fonction
unset() sur la clé désirée.
Note:
Comme dit plus haut, si aucune clé n'est spécifiée, l'indice maximal
existant est repris, et la nouvelle clé sera ce nombre, plus 1 (mais au moins 0).
Si aucun indice entier n'existe, la clé sera 0 (zéro).
Notez que la clé entière maximale pour cette opération n'a
pas besoin d'exister dans le tableau au moment de la manipulation.
Elle doit seulement avoir existé dans le tableau à un moment ou un autre
depuis la dernière fois où le tableau a été ré-indexé.
Voici un exemple qui illustre ce principe :