Déclarer un tableau et récupérer des valeurs
- #SET{mon_tableau, #ARRAY{cle1,valeur1,cle2,valeur2}}
crée la variable mon_tableau et lui affecte un tableau PHP comme valeur, qui pourrait être représenté comme suit :
| Clés | Valeurs |
|---|---|
| cle1 | valeur1 |
| cle2 | valeur2 |
Il n’est pas nécessaire d’entourer les chaines de caractères avec des guillemets simple ou double, sauf pour spécifier une chaine vide qui s’écrira ’’
- À des fins de test, on peut afficher le tableau grâce au filtre |foreach.
[(#GET{mon_tableau}|foreach)] affichera :
- cle1=> valeur1
- cle2=> valeur2
- La valeur associée à une clé donnée peut être récupérée en utilisant le filtre |table_valeur :
[(#GET{mon_tableau}|table_valeur{cle1})] retourne valeur1.
- Vérifier la présence d’une valeur dans le tableau avec le filtre |find [2] :
Remplir un tableau dynamiquement
Un intérêt des tableaux est de les remplir dynamiquement, par les résultats d’une ou plusieurs boucle(s).
Le tableau doit alors être déclaré par un #SET avant la boucle : #SET{mon_tableau,#ARRAY}
Dans la boucle, un nouveau #SET redéfinit mon_tableau à chaque itération : on le récupère par #GET et on y ajoute une nouvelle valeur grâce aux filtres |push ou |array_merge.
L’ordre des valeurs du tableau dépend des critères de tri de la boucle.
- |push ajoute simplement une valeur à la fin du tableau. La clé est indexée automatiquement : elle est incrémentée de 1 à chaque itération de la boucle et ce, à partir de 0 (la première clé est 0, puis 1, 2, 3,...).
Exemple : créer un tableau mots_choisis contenant les #ID_MOT de tous les mots-clés liés à un article.
Si les mots liés à cet article portent les numéros 4, 9 et 18, [(#GET{mots_choisis}|foreach)] retourne :
- 0=>4
- 1=>9
- 2=>18
Notez bien que [(#GET{mots_choisis}|table_valeur{2})] retourne 18, la valeur associée à la clé 2, donc la troisième valeur du tableau.
- |array_merge ajoute une paire clé/valeur à la fin du tableau. Cela permet donc de forcer le "nom" des clés.
Attention (1) : si une clé apparaît plusieurs fois, seule la dernière valeur pour cette clé sera retenue.
Attention (2) : la clé que l’on veut forcer ne peut pas être de type numérique. En effet, la documentation de array_merge précise :
Si vous passez un seul tableau à cette fonction et qu’il a des index numériques, les clés seront réindexées normalement.
Il existe deux solutions à cette limitation :
- préfixer cette clé avec une valeur alphabétique :
[(#GET{mots_choisis}|foreach)] retourne :
- mot4=>Pomme
- mot9=>Banane
- mot18=>Carotte
- inverser clé et valeur, à condition que valeur ne soit pas elle aussi numérique :
[(#GET{mots_choisis}|foreach)] retourne :
- Pomme=>4
- Banane=>9
- Carotte=>18
Dans ce cas, on pourra appliquer la fonction PHP |array_flip comme filtre sur le tableau final (après la boucle) :
[(#SET{mots_choisis, #GET{mots_choisis}|array_flip})][(#GET{mots_choisis}|foreach)] retourne alors :
- 4=>Pomme
- 9=>Banane
- 18=>Carotte
Utiliser le tableau dans une boucle avec l’opérateur IN
Reprenons le tableau mots_choisis contenant des #ID_MOT, on peut sélectionner ensuite les articles liés aux mêmes mots-clés que notre article initial grâce au critère IN.
Cette utilisation connaît de multiples usages, notamment lorsque l’on veut sélectionner des objets à l’aide de plusieurs critères qui ne peuvent faire partie de la même boucle, puis les mélanger entre eux avec un critère de tri unique.
Exemples d’utilisation des tableaux
- Affichage conditionnel en fonction de la page (valeur de #ENV{page}) :
- Affichage conditionnel en fonction d’une variable passée dans l’URL [3] :
- Sélectionner les articles d’une rubrique et ceux associés par ailleurs à un mot-clé puis lister tous ces articles par date.
