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 (déprécié depuis SPIP 4)
-  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.
Depuis SPIP 3.0, on peut simplifier sous la forme suivante [(#GET{mon_tableau/cle1})].
-  Vérifier la présence d’une valeur dans le tableau avec le filtre |find [2] :
[(#GET{mon_tableau}|find{valeur2}|oui)
  Ceci s'affiche si la valeur est dans le tableau.
]
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.
#SET{mon_tableau,#ARRAY}
<BOUCLE(...)>
    #SET{mon_tableau, #GET{mon_tableau}|push{#COMPTEUR_BOUCLE}}
</BOUCLE>
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.
#SET{mots_choisis, #ARRAY}
<BOUCLE_themes(MOTS){id_article}>
  #SET{mots_choisis, #GET{mots_choisis}|push{#ID_MOT}}
</BOUCLE_themes>
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 :
#SET{mots_choisis, #ARRAY}
<BOUCLE_themes(MOTS) {id_article}>
  [(#SET{mots_choisis,#GET{mots_choisis}|array_merge{#ARRAY{mot#ID_MOT,#TITRE}}})]
</BOUCLE_themes>
[(#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 :
#SET{mots_choisis, #ARRAY}
<BOUCLE_themes(MOTS) {id_article}>
  [(#SET{mots_choisis,#GET{mots_choisis}|array_merge{#ARRAY{#TITRE,#ID_MOT}}})]
</BOUCLE_themes>
[(#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
 
Dans certains cas, on pourra utiliser la balise #LISTE qui permet de saisir des tableaux sous forme simplifiée
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.
#SET{mots_choisis, #ARRAY}
<BOUCLE_themes(MOTS){id_article}>
  #SET{mots_choisis, #GET{mots_choisis}|push{#ID_MOT}}
</BOUCLE_themes>
<BOUCLE_memes_themes(ARTICLES) {id_mot IN #GET{mots_choisis}}>
  #TITRE <br>
</BOUCLE_memes_themes>
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}) :
[(#ENV{page}|in_array{#ARRAY{0,article,1,rubrique,2,site}}|oui)
Affichage conditionnel: la page est celle d'un article, d'une rubrique ou d'un site. ]
- Affichage conditionnel en fonction d’une variable passée dans l’URL [3] :
<BOUCLE_tous_les_mots(MOTS){par titre}{", "}>
  <a href="[(#SELF|parametre_url{lolo,#ID_MOT})]">#TITRE</a>
</BOUCLE_tous_les_mots>
#SET{les_mots, #ARRAY}
<BOUCLE_certains_mots(MOTS){id_article}>
  #SET{les_mots, #GET{les_mots}|push{#ID_MOT}}
</BOUCLE_certains_mots>
[<br>Ceci s'affichera si la valeur de la variable 'lolo' passée dans l'url est présente dans un tableau 'les_mots' déclaré et rempli précédemment.
  (#ENV{lolo}|in_any{#GET{les_mots}}|oui)]
- Sélectionner les articles d’une rubrique et ceux associés par ailleurs à un mot-clé puis lister tous ces articles par date.
#SET{les_articles,#ARRAY}
<BOUCLE_articles_rubrique(ARTICLES){id_rubrique}>
  #SET{les_articles,#GET{les_articles}|push{#ID_ARTICLE}}
</BOUCLE_articles_rubrique>
<BOUCLE_articles_mot(ARTICLES){id_mot}>
  #SET{les_articles,#GET{les_articles}|push{#ID_ARTICLE}}
</BOUCLE_articles_mot>
<BOUCLE_affiche(ARTICLES){id_article IN #GET{les_articles}}{par date}>
  <br>#TITRE
</BOUCLE_affiche>
Boucler sur n’importe quel tableau
On pourra utiliser la boucle DATA pour boucler arbitrairement sur un tableau.
Tester si un tableau est vide
1er cas
Si #GET{mon_tableau} est un tableau vide
/* je déclare un tableau vide */
[(#SET{mon_tableau, #ARRAY})]
/* alors le test suivant est suffisant : */
[(#GET{mon_tableau}|non) … ]
2e cas
Dans le cas d’entrées vides dans le tableau tel que :
[(#SET{mon_tableau, #ARRAY{0,'',1,0}})]
…on pourra utiliser la fonction PHP array_filter() qui enlèvera du tableau toute valeur équivalente à false du tableau.
[(#GET{mon_tableau}|array_filter|non) ... ]
Voir aussi
- #LISTE : balise pratique pour déclarer de simples tableaux indexés
 - La boucle DATA : pour utiliser des tableaux complexes