SPIP

[ar] [ast] [bg] [br] [ca] [co] [cpf] [cs] [da] [de] [en] [eo] [es] [eu] [fa] [fon] [fr] [gl] [id] [it] [ja] [lb] [nl] [oc] [pl] [pt] [ro] [ru] [sk] [sv] [tr] [vi] [zh] Espace de traduction

Télécharger

#ARRAY

Juin 2009 — mis à jour le : Août 2010

Toutes les versions de cet article :

La balise #ARRAY peut contenir un tableau PHP, c’est-à-dire un ensemble de paires clé/valeur, que l’on veut stocker pour les réutiliser dans la suite du squelette.

Le tableau doit être déclaré par la balise #SET et peut ensuite être récupéré par la balise #GET [1].

Il peut être utilisé ensuite, entre autres, associé au critère IN d’une boucle.


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ésValeurs
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.

Notes

[1Voir #SET et #GET pour plus de détails.

[2|find correspond à la fonction PHP in_array, à la différence que ce filtre ne produit pas le message d’erreur "Warning : in_array() [function.in-array] : Wrong datatype for second argument." si la variable n’est finalement pas un tableau. En effet, lorsqu’une variable est générée dynamiquement, on ne sait pas toujours si elle existera et s’il s’agira bien d’un tableau.

[3Voir #SELF et |parametre_url.


Voir le squelette de cette page Site réalisé avec SPIP | Espace de traduction | Espace privé
123