Les tableaux

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 .

Syntaxe

Créer un tableau array()

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 .

Une clé key est soit un entier positif ou bien une chaîne . Si une clé est la représentation standard d' un entier positif , elle sera interprété 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 .

Omettre des clés

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 spécifiez une qui a déjà été assigné , la nouvelle valeur écrasera la précédente .

 
array(

 
[

 
  
   
key

  

 

 
=

 
]

 
  
   
value

  

 

 
,

 
..

 
.

 
     )

 
/

 
/

 
  
   
key

  

 

 
is

 
either

 
  
   
string

  

 

 
ou

 
entier

 
  
   
integer

  

 

 
positif

 
/

 
/

 
  
   
value

  

 

 
peut

 
être

 
n

 
'importe

 
quoi





La syntaxe à crochets

Vous pouvez aussi modifier un tableau existant en lui assignant simplement des valeurs .

L ' assignement 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



Si $arr n'existe pas, il sera créé. Cela en fait une alternative pour créer un tableau. Pour modifier une valeur, assignez lui une nouvelle valeur. Pour supprimer une valeur, utilisez la fonction unset() .

Fonctions pratiques

Il y a toute une panoplie de fonctions pratiques pour travailler avec les tableau : array-functions .

L' élément de langage foreach est spécifiquement dédiée aux tableau : elle permet de passer en revue simplement les valeurs d 'un tableau .

Exemples

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-3 . Utilisation de array( )

 
?php

 
/

 
/

 
Array

 
comme

 
correspondance

 
$map

 
=

 
array(

 
'version

 
'

 
=

 
4

 
,

 
'OS

 
'

 
=

 
'Linux

 
'

 
,

 
'langue

 
'

 
=

 
'français

 
'

 
,

 
'short_tags

 
'

 
=

 
TRUE

 
)

 
;

 
/

 
/

 
valeur

 
strictement

 
numériques

 
$array

 
=

 
array

 
(

 
7

 
,

 
8

 
,

 
0

 
,

 
156

 
,

 
-10

 
)

 
;

 
/

 
/

 
ceci

 
est

 
la

 
même

 
chose

 
que

 
array

 
(

 
0

 
=

 
7

 
,

 
1

 
=

 
8

 
,

 
..

 
.

 
)

 
$switching

 
=

 
array

 
(

 
10

 
/

 
/

 
clé

 
=

 
0

 
,

 
5

 
=

 
6

 
,

 
3

 
=

 
7

 
,

 
'a

 
'

 
=

 
4

 
,

 
11

 
/

 
/

 
clé

 
=

 
6

 
(index

 
maximum

 
:




 
5)

 
,

 
'8

 
'

 
=

 
2

 
/

 
/

 
clé

 
=

 
8

 
(entier

 
!

 
)

 
,

 
'02

 
'

 
=

 
77

 
/

 
/

 
clé

 
=

 
'02

 
'

 
,

 
0

 
=

 
12

 
/

 
/

 
la

 
valeur

 
de

 
la

 
clé

 
10

 
sera

 
remplacée

 
par

 
12

 
)

 
;

 
/

 
/

 
empty

 
array

 
$empty

 
=

 
array()

 
;

 
?



Exemple 7-4 .

 
 ?php

 
$couleurs

 
=

 
array(

 
'rouge'

 
,'bleu'

 
,'vert'

 
,'jaune')

 
;

 
foreach

 
(

 
$couleurs

 
as

 
$couleur

 
)

 
{

 
echo

 
"Aimez-vous

 
la

 
couleur

 
$couleur?\n"

 
;

 
  }

 
/

 
*

 
Affiche

 
:




 
Aimez-vous

 
la

 
couleur

 
rouge

 
?




 
Aimez-vous

 
la

 
couleur

 
bleu

 
?




 
Aimez-vous

 
la

 
couleur

 
vert

 
?




 
Aimez-vous

 
la

 
couleur

 
jaune

 
?

 
*

 
/

 
?



Notez qu' il n'est pas possible actuellement de modifier les valeurs d 'un tableau avec une telle boucle . Une solution pour cela est :

Exemple 7-5 .

 
 ?php

 
foreach(

 
$couleurs

 
as

 
$cle

 
=

 
$couleur

 
)

 
{

 
/

 
/

 
ne

 
marche

 
pas

 
/

 
/$couleur

 
=

 
strtoupper($couleur)

 
;

 
/

 
/marche

 
:

 
$couleurs[$cle

 
]

 
=

 
strtoupper($couleur)

 
;

 
  }

 
print_r($couleur)

 
;

 
/

 
*

 
Affiche

 
:




 
Array

 
(

 
[0

 
]

 
=

 
ROUGE

 
[1

 
]

 
=

 
BLEU

 
[2

 
]

 
=

 
VERT

 
[3

 
]

 
=

 
JAUNE

 
)

 
*

 
/

 
?





Cet exemple crée un tableau d ' index minimal 1 .

Exemple 7-6 . Tableau en 1

 
 ?php

 
$firstquarter

 
=

 
array(

 
1

 
=

 
'Janvier'

 
,

 
'Février'

 
,

 
'Mars')

 
;

 
print_r($firstquarter)

 
;

 
/

 
*

 
Affiche

 
:




 
Array

 
(

 
[1

 
]

 
=

 
'Janvier

 
'

 
[2

 
]

 
=

 
'Février

 
'

 
[3

 
]

 
=

 
'Mars

 
'

 
)

 
*

 
/

 
?





Exemple 7-7 . Remplissage d ' un tableau

 
?php

 
/

 
/

 
remplis

 
un

 
tableau

 
avec

 
les

 
noms

 
de

 
fichiers

 
d'

 
un

 
dossier

 
$handle

 
=

 
opendir('

 
.')

 
;

 
while

 
(

 
$file

 
=

 
readdir($handle

 
)

 
)

 
{

 
$files[

 
]

 
=

 
$file

 
;

 
  }

 
closedir($handle)

 
;

 
?



Les tableaux sont ordonnés . Vous pouvez modifier l ' ordre des valeurs avec de nombreuses fonctions de classement . Voyez les fonctions de tableaux .

Exemple 7-8 . Tri 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-9 . Tableaux multi-dimensionnels , et récursifs

 
?php

 
$fruits

 
=

 
array

 
(

 
"fruits

 
"

 
=

 
array

 
(

 
"a

 
"

 
=

 
"orange

 
"

 
,

 
"b

 
"

 
=

 
"banane

 
"

 
,

 
"c

 
"

 
=

 
"pomme

 
"

 
                                          )

 
,

 
"nombres

 
"

 
=

 
array

 
(

 
1

 
,

 
2

 
,

 
3

 
,

 
4

 
,

 
5

 
,

 
6

 
                                           )

 
,

 
"trous

 
"

 
=

 
array

 
(

 
"premier

 
"

 
,

 
5

 
=

 
"second

 
"

 
,

 
"troisième

 
"

 
                                           )

 
)

 
;

 

?



Attention aux tableaux

Pourquoi est ce que $foo[bar] est invalide?

Dans vos vieux scripts , vous pouvez avoir utilisé la syntaxe suivante :

 
?php

 
$foo[

 
bar

 
]

 
=

 
'ennemi'

 
;

 
echo

 
$foo[bar]

 
;

 
?



Cela est mauvais, mais ca marche. Pourquoi est-ce mauvais? La raison est que PHP réclame une expression entre les crochets (comme indiqué dans la section sur la syntaxe des tableaux). Cela signifie que vous pouvez écrire quelque chose comme :
 
?php

 
echo

 
$arr[

 
foo(true

 
)

 
]

 
;

 
?



Ceci est un exemple d'utilisation de retour de fonction dans un index de tableau. PHP reconnait aussi les constantes, et vous pouvez avoir déjà rencontré E_* .
 
?php

 
$error_descriptions[

 
E_ERROR

 
]

 
=

 
"Une

 
erreur

 
fatale

 
est

 
survenue"

 
;

 
$error_descriptions[E_WARNING

 
]

 
=

 
"PHP

 
a

 
généré

 
une

 
alerte"

 
;

 
$error_descriptions[E_NOTICE

 
]

 
=

 
"Ceci

 
est

 
juste

 
une

 
note

 
grâcieuse"

 
;

 
?



Notez que E_ERROR est aussi un identifiant vlaide, tout comme bar dans le premier exemple. Mais le dernier exemple revient à écrire :
 
?php

 
$error_descriptions[

 
1

 
]

 
=

 
"Une

 
erreur

 
fatale

 
est

 
survenue"

 
;

 
$error_descriptions[2

 
]

 
=

 
"PHP

 
a

 
généré

 
une

 
alerte"

 
;

 
$error_descriptions[8

 
]

 
=

 
"Ceci

 
est

 
juste

 
une

 
note

 
grâcieuse"

 
;

 
?



car E_ERROR égale 1 , etc.

Alors , comment se fait-tile que $foo[ bar ] fonctionne ? C ' est parce que bar est attendu comme une constante . Cependant , dans ce cas , aucune constante n ' a pour nom bar . PHP suppose alors que vous voulez dire bar littéralement , c' est-à-dire la chaîne "bar " , mais que vous avez oublié les guillements .

Alors, pourquoi est-ce mal?

Dans le futur , l ' équipe de développement peut vouloir ajouter une nouvelle constante et vous vous retrouverez dans la panade . Par exemple , vous ne pouvez déjà pas utiliser les constantes empty et default , car ce sont des mots reservés .

Et , pour en mettre une autre couche , cette syntaxe est tout simplement obsolète , et risque de ne plus fonctionner du tout un jour ou l ' autre .

Lorsque vous activez le rapport d' erreur avec error_reporting( ) avec E_ALL , PHP générera des notes à chaque fois que cette syntaxe est utilisée . Essayez donc error_reporting( E_ALL) ; dans vos scripts , pour voir ) .

Dans une chaîne à guillements doubles , une autre syntaxe est valide . Voyez la section sur Traitement des variables dans les chaînes pour plus de détails .