Extension:Arrays

This page is a translated version of the page Extension:Arrays and the translation is 100% complete.
Avertissement Avertissement : Cette extension n'est pas compatible avec les plans de parallélisation de l'analyse syntaxique, comme prévu par l'utilisation de Parsoid . Par conséquent, l'avenir de cette extension est incertain et il est probable qu'elle deviendra incompatible avec l'analyseur standard MediaWiki dans quelques années. Pour d'autres informations, voir tâche T250963 et No support for sequential, in-order processing of extension tags .
Manuel des extensions MediaWiki
Arrays
État de la version : stable
Implémentation Fonction d'analyseur
Description Etend l’analyseur avec des fonctions de tableau.
Auteur(s) Li Ding, Jie Bao, Daniel Werner
Dernière version 2.2.1 (2020-12-08)
MediaWiki 1.31+
Modifie la base
de données
Non
Licence Licence MIT
Téléchargement
README
CHANGELOG
  • $wgArraysCompatibilityMode
  • $wgArraysExpansionEscapeTemplates
Téléchargements trimestriels 40 (Ranked 94th)
Traduire l’extension Arrays sur translatewiki.net si elle y est disponible
Problèmes Tâches ouvertes · Signaler un bogue

L’extension Arrays (anciennement appelée ArrayExtension) crée un ensemble supplémentaire de fonctions d'analyseur qui fonctionnent sur arrays.

Fonctions

Cette extension définit les fonctions analyseur suivantes :

Groupe Fonctions
Construire un tableau (avec des options uniques, de tri et d’impression) #arraydefine
Extraire des informations d’un tableau #arrayprint, #arrayindex, #arraysize, #arraysearch, #arraysearcharray, #arrayslice
Modifier un tableau #arrayreset, #arrayunique, #arraysort
Interaction entre plusieurs tableaux #arraymerge, #arrayunion, #arrayintersect, #arraydiff
Dans le cas où Extension:HashTables est installé, pour l’interaction tableau/hash-table #hashtoarray , #arraytohash

Construction de tableaux

arraydefine

Cette fonction construit un tableau (identifié par key) en utilisant une liste de values séparée par delimiter. La variable peut être accédée par d’autres fonctions plus tard.

Syntaxe :

{{#arraydefine:key|values|delimiter|options}}

Notes :

  • values est une liste de chaînes de caractères séparées par delimiter.
  • Le tableau résultant est un tableau de chaînes.
  • Le délimiteur par défaut est , si non spécifié; un délimiteur peut être une chaîne (les espaces vides entourant le délimiteur seront supprimés) ou une expression régulière Perl, par exemple /\s*,\s*/ (voir preg_split).
  • Les utilisateurs peuvent définir un tableau vide (voir l'exemple).
  • Les utilisateurs peuvent spécifier des options, y compris pour l'unicité, le tri et l'impression (voir l'exemple).
    • Les options sont ignorées à moins qu'un délimiteur ne soit également spécifié.

Exemples :

Définir un tableau à un élément nommé a
{{#arraydefine:a|red}}
Définir un tableau à quatre éléments nommé b en utilisant le délimiteur par défaut (,)
{{#arraydefine:b|orange, red, yellow, yellow}}
Définir / initialiser un tableau vide nommé c
{{#arraydefine:c}}
Définir un tableau à deux éléments nommé d en utilisant ; comme délimiteur
{{#arraydefine:d|apple; pear|;}}
Définir un tableau à trois éléments nommé e en utilisant l'expression régulière /\s*[;,]\s*/ comme délimiteur
{{#arraydefine:e|apple, pear; orange|/\s*[;,]\s*/}}
Définir un tableau de trois éléments nommé f, utiliser le délimiteur (,), les options unique, sort=desc, print=list (les éléments du tableau sont uniques, triés dans l'ordre décroissant et imprimés). Pour plus de valeurs des options de tri, voir #arraysort.
{{#arraydefine:f|orange, red, yellow, yellow |, |unique, sort=desc, print=list}}

Utiliser les tableaux

Extraction

arrayprint

Cette fonction imprime les valeurs d'un tableau dans un format personnalisable.

Syntaxe :

{{#arrayprint:key|delimiter|pattern|subject|options}}

Notes :

  • subject accepte les liens wiki, les modèles et les fonctions d'analyse syntaxique.
  • Dans subject, vous ne devez pas échapper les barres verticales '|'. Dans l'ensemble de la construction, le pattern sera recherché et remplacé par la valeur actuelle du tableau (échappée) de chaque boucle. Enfin, la chaîne complète sera analysée et placée dans un tableau de résultats formaté avec le séparateur delimiter.
  • Dans le cas où le tableau qui doit être imprimé n'existe pas, une chaîne vide sera renvoyée (introduit dans 1.4 alpha, partie du mode de compatibilité).
  • Le délimiteur par défaut dépend de la langue; pour l'anglais c'est , (introduit dans 2.0, partie du mode compatibilité).

Exemple :

Task Example code Output (the array b is defined above)
Imprimer - en utilisant le délimiteur de liste par défaut dépendant de la langue
{{#arrayprint:b}}
  • orange, red, yellow, yellow
Imprimer - sans délimiteur
{{#arrayprint:b | }}
  • orangeredyellowyellow
Imprimer - en utilisant ‎<br /> (passage à la ligne) comme délimiteur
{{#arrayprint:b |<br/> }}
orange

red

yellow

yellow

Sortie améliorée où les deux derniers éléments sont chaînés avec un and (ou son équivalent local en fonction de la langue). Même si le paramètre delimiter est vide, , (ou l'équivalent dans la langue) sera utilisé car ça ne serait pas beau sinon.
{{#arrayprint:b ||@ |@ |print=pretty }}
Inclure un lien wiki vers les catégories
{{#arrayprint:b |<br/> |@@@@ |[[:Category:@@@@|@@@@]] }}
orange

red

yellow

yellow

Définir une valeur de propriété Semantic MediaWiki
{{#arrayprint:b |<br/> |@@@@ |[[prop1::@@@@]] }}
Inclure une fonction d'analyseur
{{#arrayprint:b |<br/> |@@@@ |length of @@@@:{{#len:@@@@}} }}
Inclure un modèle (avec les paramètres)
{{#arrayprint:b|<br/>|@@@@|{{template|prop2|@@@@}} }}

arrayindex

Cette fonction imprime la valeur d'un tableau (identifié par key) à la position index.

Syntaxe :

{{#arrayindex:key|index|default}}

Notes :

  • Un index non valide (non numérique, hors limite) entraînera l'impression d'une chaîne vide.
  • L'index commence à 0; le premier élément a donc pour index 0.
  • Les indices négatifs rendront un élément compté à partir de la fin (par exemple, -1 sera le dernier élément des tableaux).
  • default sera retourné si le tableau n'existe pas, si la clé n'existe pas dans le tableau, ou si la valeur est une chaîne vide.

Exemples :

Troisième élément d'un tableau a
{{#arrayindex:a |2 }}
Dernier élément du tableau b
{{#arrayindex:b |-1 }}
Imprimer la valeur par défaut de l'index non valide
{{#arrayindex:c |foo |bad value }}

arraysize

Cette fonction renvoie la taille (nombre d'éléments) d'un tableau.

Voir https://php.net/function.count. Si le tableau donné n'existe pas, la sortie de la fonction sera une chaîne vide au lieu d'un nombre. Cela permet de vérifier que le tableau existe.

Syntaxe :

{{#arraysize:key}}

Exemples :

Taille du tableau a
{{#arraysize:a}}
Vérifier si le tableau a existe ou pas
{{#if: {{#arraysize:a}} | ''le tableau existe'' | ''tableau non défini'' }}

arraysearch

Cette fonction renvoie l'indice de la première occurrence de value dans l'ensemble (identifié par key), à partir de la position identifiée par le paramètre index, et renvoie une chaîne vide en cas d'échec. Lorsque yes et / ou no sont spécifiés, cela étendra la valeur définie pour yes si elle est trouvée, sinon il vaut no. Voir https://php.net/function.array-search

Syntaxe :

{{#arraysearch:key|value|index|yes|no}}


Exemples :

Renvoie l'index de la première occurrence d'une valeur
{{#arraysearch:b|white}}
{{#arraysearch:b|red}}
utiliser le décalage
{{#arraysearch:b|red|0}}
{{#arraysearch:b|red|2}}
utiliser la correspondance d'expression régulière preg
{{#arraysearch:b|/low/}}
{{#arraysearch:b|/LOW/i}} - non sensible à la casse
{{#arraysearch:b|low}}
utiliser l'option d'impression yes / no
{{#arraysearch:b|white|0|yes|no}}
{{#arraysearch:b|yellow|0|yes|no}}

arraysearcharray

Cette fonction recherche dans un tableau (identifié par key) et crée un nouveau tableau (identifié par new_key) à partir des résultats de la recherche. Le critère de recherche value peut être une chaîne ou une expression régulière. Si on donne index, la recherche commence là, limit peut définir le nombre maximum de résultats. Le paramètre identifié par transform peut être utilisé si value est une expression régulière. Il peut transformer le résultat des entrées correspondantes en tableau new_key comme le ferait PHP preg_replace .

Syntaxe :

{{#arraysearcharray:new_key|key|value|index|limit|transform}}

Notes :

  • Si value est une chaîne, le tableau new_key ne contiendra que les entrées qui correspondront à cette chaîne.
  • Les valeurs négatives de index comme -n peuvent être utilisées pour rechercher les n dernières entrées seulement.
  • Si Extension:Regex Fun/fr est disponible dans le wiki, le modificateur e de Regex Fun peut être utilisé dans l'expression régulière. Cela n'a rien à voir avec le modificateur e de PHP (ce qui serait une faille de sécurité). Avec le modificateur e actif, la chaîne transform sera analysée après l'insertion des back-refs, après quoi elle remplacera la correspondance actuelle.

Exemple :

Trouvez toutes les entrées du tableau a qui commencent avec A suivies d'une espace et mettez-les dans un nouveau tableau x.
{{#arraysearcharray:x |a |/^A\s.+/ }}
Rechercher toutes les entrées du tableau a qui se terminent par des nombres et mettre ces nombres dans un nouvel tableau y.
{{#arraysearcharray:y |a |/^.*?(\d+)$/ |0 |-1 | $1 }}
Rechercher toutes les entrées de l'ensemble a qui se terminent par des nombres et mettre la longueur de ces éléments dans le nouveau tableau (cela nécessite l'extension Regex Fun).
{{#arraysearcharray:y |y |/^.*?\d+$/e |0 |-1 | {{#len:$0}} }}
Supprimer les valeurs vides du tableau a.
{{#arraysearcharray:a|a|/\S+/}}

arrayslice

Cette fonction extrait un sous-tableau (identifié par key) dans un nouveau tableau (identifié par new_key).

Voir https://php.net/function.array-slice

Syntaxe :

{{#arrayslice:new_key|key|offset|length}}

Notes :

  • Le décalage indique le point de départ de la tranche, il peut s'agir d'un nombre non négatif ou d'un nombre négatif de l'indice si on compte à partir de la fin (par exemple, le dernier élément de l'offset de l'ensemble est -1). Le décalage est différent de l'index (qui doit être un nombre non négatif)
  • La longueur indique le nombre d'éléments à extraire. Si elle est omise, alors la séquence comprendra tout depuis le décalage (offset) jusqu'à la fin du tableau.
  • Si le décalage dépasse la taille du tableau, on renvoie un tableau vide, et si le décalage est une valeur négative, un nouveau tableau est renvoyé avec tous les éléments.

Exemple :

Extraire une tranche de deux éléments à partir de l'élément décalé de 1.
{{#arrayslice:x|b|1|2}}
Extraire une tranche de deux éléments à partir de l'élément décalé de -2.
{{#arrayslice:x|b|-2|2}}

Altération

Fonctions qui modifient directement un tableau au lieu d'en créer un nouveau.

arrayunique

Cette fonction convertit un tableau (identifié par key) en un set (pas de membres dupliqués, pas d'élément vide).

Voir https://php.net/function.array-unique

Syntaxe :

{{#arrayunique:key}}

Exemple :

Conversion de tableau en set
{{#arrayunique:b}}

arrayreset

Cette fonction invalidera certains ou tous les tableaux définis.

Syntaxe :

{{#arrayreset:}} <!-- supprime TOUS les tableaux -->
{{#arrayreset:key1 |key2 |... |key-n }}

Notes :

  • En utilisant arraysize sur eux, ils renverront une chaîne vide au lieu de 0, donc ils sont vraiment non définis, et non pas vides. Pour vider simplement un tableau de son contenu, utilisez {{#arraydefine:key}}.
  • Avant la version 1.4 alpha , est utilisé comme séparateur entre plusieurs tableaux qui doivent être non définis.

arraysort

Cette fonction trie un tableau dans l'ordre suivant.

Syntaxe :

{{#arraysort:key|order}}

Note :

  • Chaque élément d'un tableau est traité comme une chaîne de caractères, ce qui signifie que les nombres ne peuvent pas être ordonnés comme prévu.

Exemple :

Trier un tableau.
{{#arraysort:x|desc}}
Remplir un tableau de valeurs aléatoires.
{{#arraysort:x|random}}
Inverser un tableau.
{{#arraysort:x|reverse}}

Interaction

Ces fonctions travaillent avec plusieurs tableaux, créant un nouveau tableau ou en réécrasant un tableau existant avec le résultat. Depuis la version 2.0, ces fonctions peuvent interagir avec plus de deux tableaux simultanément. Si elles ne traitent qu'un seul tableau, elles créent simplement une copie de ce tableau. Tous les tableaux non existants seront simplement ignorés par ces fonctions.

arraymerge

Cette fonction fusionne les valeurs de deux ou plusieurs tableaux dans un nouveau (identifié par new_key).

Voir https://php.net/function.array-merge

Syntaxe :

{{#arraymerge:new_key |key1 |key2 |... |key-n }}

Exemple :

Fusion de deux tableaux.
{{#arraymerge:x |a |b }}
Dupliquer un tableau (laisser vide le troisième argument de arraymerge).
{{#arraymerge:x |b }}

arrayunion

Cette fonction fusionne les valeurs de deux ou plusieurs tableaux dans un nouveau tableau (identifié par new_key) sans valeurs dupliquées.

Syntaxe :

{{#arrayunion:new_key |key1 |key2 |... |key-n }}

Notes :

  • Il s'agit d'un opérateur sur les ensembles, donc le tableau est renvoyé sous forme de set, sans valeurs dupliquées.
  • Ceci est égal à arraymerge avec arrayunique après.

Exemple :

Union de trois tableaux.
{{#arrayunion:x |a |b |c }}

arraydiff

Cette fonction calcule la différence (au sens théorie des ensembles) de deux ou plusieurs tableaux. Le tableau résultat est identifié par new_key. Le tableau renvoyé est un set qui contient les éléments du premier tableau donné (identifié par key1) qui ne sont définis dans aucun des autres tableaux. Voir https://php.net/function.array-diff

Syntaxe :

{{#arraydiff:new_key |key1 |key2 |... |key-n }}

Note :

  • Il s'agit d'un opérateur sur les ensembles, donc le tableau est renvoyé sous forme de set, sans valeurs dupliquées.
  • Cette fonction peut être utilisée pour tester la relation de sous-classe.

Exemple :

Diff (b-a)
{{#arraydiff:x |b |a }}
Diff (a-b)
{{#arraydiff:x |a |b }}
Diff (a-(b+c))
{{#arraydiff:x |a |b |c }}

arrayintersect

Cette fonction calcule l'intersection au sens théorie des ensembles de deux ou plusieurs tableaux. Le tableau résultat est identifié par new_key. Voir https://php.net/function.array-intersect

Syntaxe :

{{#arrayintersect:new_key |key1 |key2 |... |key-n }}

Note :

  • Il s'agit d'un opérateur sur les ensembles, donc le tableau est renvoyé sous forme de set, sans valeurs dupliquées.

Exemple :

L'intersection de trois tableaux est rangée dans un nouveau tableau x
{{#arrayintersect:x |a |b |c }}

Installation

  • Téléchargez et placez le(s) fichier(s) dans un répertoire appelé Arrays dans votre dossier extensions/.
    Les développeurs et les contributeurs au code doivent à la place installer l'extension à partir de Git en utilisant:cd extensions/
    git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/Arrays
  • Ajoutez le code suivant à la fin de votre fichier LocalSettings.php  :
    wfLoadExtension( 'Arrays' );
    
  • Configurer si nécessaire.
  •   Fait – Accédez à Special:Version sur votre wiki pour vérifier que l'extension a bien été installée.

Configuration

Arrays 2.0 introduit deux variables de configuration :

$egArraysCompatibilityMode
($egArrayExtensionCompatbilityMode en v1.4 alpha) initialisé à true, cela activera le mode de compatibilité qui ramènera le comportement de l'ancien ArrayExtension v1.3.2 le plus possible. En effet ceci est dû à l'introduction dans la version 2.0 de plusieurs changements majeurs. Donc, l'utilisation de ce mode de compatibilité permet un passage fluide de l'extension Arrays, de la 1.x à la 2.x . Par défaut, le mode de compatibilité n'est pas activé. Si vous avez déjà utilisé l'ancien ArrayExtension dans votre wiki, vous voudrez peut-être jeter un oeil à cette liste et aligner vos modèles avant de passer à Arrays sans le mode compatibilité.
$egArraysExpansionEscapeTemplates
Contient une liste de paires clé-valeur de caractères devant être remplacés par un modèle ou l'appel d'une fonction d'analyse sur un tableau de valeurs comprises dans #arrayprint. En remplaçant ces caractères spéciaux avant d'inclure les valeurs dans la chaîne qui est développée par la suite, les valeurs d'un tableau ne peuvent pas perturber le code MW autour. Sinon, les valeurs du tableau elles-mêmes seraient analysées également. Par défaut, cela va échapper les caractères suivants avec des appels au modèle ou à la fonction d'analyse suivante :
  • = = {{=}} (Template:= doit afficher =)
  • | = {{!}} (Template:! doit afficher |)
  Note : À partir de MW 1.24.0 il n'est plus nécessaire de créer Template:! puisque son action est réalisée par le nouveau mot magique {{!}} .
  • {{ = {{((}} (Template:(( doit afficher {{)
  • }} = {{))}} (Template:)) doit afficher }})
Assurez-vous que ces modèles ou ces fonctions d'analyse existent dans votre wiki ou modifiez cette variable en conséquence. Si cela n'est pas configuré correctement, #arrayprint peut imprimer des valeurs inattendues au cas où l'une de ces séquences de caractères est utilisée comme valeur dans un tableau.
$egArraysExpansionEscapeTemplates peut également être initialisé simplement à null, dans ce cas, il passe à nouveau au comportement pré 2.0 où les valeurs d'un tableau avec ces séquences de caractères cassaient le code donné de subject dans #arrayprint. Si le mode de compatibilité est activé, il sera toujours traité comme valant null.

Questions fréquentes

Réitérer l'accès aux éléments d'un tableau

Il est possible d'accéder successivement aux éléments d'un tableau à l'aide de #arrayprint ou Extension:Loops .

Utiliser arrayprint

<!-- définir un tableau -->
{{#arraydefine:colors|Red,Blue,Yellow}}

{{#arrayprint:colors||@@@@|<nowiki/>
* longueur de @@@@ : {{#len:@@@@}}
}}

Voici la sortie attendue :

  • longueur de Red : 3
  • longueur de Blue : 4
  • longueur de Yellow : 6

Vous trouverez d'autres exemples sur l'ancien wiki Tetherless World  J'y vais ! 

Réutiliser les clés

Une fois qu'un tableau déjà défini est imprimé, la même clé peut être réutilisée pour un autre tableau plus loin sur la page. Tant que cette séquence est observée, il n'est pas nécessaire de définir une clé unique pour chaque tableau.

Utiliser l'extension Loops

Pour des tâches plus complexes, il est possible de faire une boucle sur un tableau en utilisant l'extension Loops .

{{ #arraydefine: colors | red;#FF0000, green;#00FF00, blue;#0000FF }}
{{
  #loop: i
  | 0                       <!-- valeur de départ des boucles pour {{ #var:i }} -->
  | {{ #arraysize:colors }} <!-- nombre de boucles -->
  | <nowiki/>
* {{
    #arraydefine: val | {{ #arrayindex:colors | {{ #var:i }} }} | ;
  }}
  <span style="color:{{ #arrayindex: val | 1 }}">
  {{ #arrayindex: val | 0 }}
  </span>
}}

Cela produirait quelque chose comme :

  • red
  • green
  • blue

Il y a deux façons de populer un tableau avec des données sémantiques. La première solution, qui utilise les formulaires Semantic Result est plus rapide et plus fiable, elle fonctionne également avec des set de données complexes, y compris les record et les valeurs multiples pour une propriété.

Semantic Result Formats (SRF) présentent le format des résultats sémantiques et introduisent le format Array dans la version 1.6.1. Il peut être utilisé pour consulter les données qui seront automatiquement stockées dans un tableau Extension:Arrays. C'est la solution préférée pour traiter les données sémantiques dans des tableaux. Les détails sont disponibles sur semantic-mediawiki.org.

Exemple :

{{#ask: [[Category:Color]][[:+]] |format=array |name=colors}}
{{#arrayprint: colors}}

Utiliser une requête standard

Si vous ne pouvez pas utiliser la solution SRF ci-dessus, Arrays permet également de remplir un tableau en utilisant le résultat d'une requête SMW au format liste :

Exemple A : Pour créer une liste d'instances de la classe Color

{{#arraydefine:colors|{{#ask:[[Category:Color]][[:+]] |sep =, |limit=1000}} }}

Exemple B : Pour créer une liste unique de valeurs pour la propriété has color

{{#arraydefine:colors|{{#ask:[[has color::+]][[:+]] |?color= |mainlabel=- |sep =, |limit=1000}} |,|unique}}

Exemple C : Pour traiter les tableaux à deux dimensions générés par les requêtes SWM (par exemple la propriété record-type)

given a 2D array "red;#da2021, yellow;#fcff00, green;#00ff00"

1. créer un tableau ''colors''
{{#arraydefine:colors|red;#da2021, yellow;#fcff00, green;#00ff00}}

2. séparez divisez le premier élément de ''colors'' dans un autre tableau ''colors0''
{{#arraydefine:color0|{{#arrayindex:colors|0}}|;}}

Notes :

  • paramètres de requête sémantique
    • L'option limit=1000 est utilisée pour purger tous les résultats renvoyés par la requête sémantique
    • L'option sep=, est utilisée pour définir le séparateur pour l'entrée des résultats
    • Option mainlabel=- pour couper la colonne de page

De la même manière que décrit ci-dessus pour SMW, l'extension Arrays peut être utilisée pour stocker les résultats d'une requête DPL. Une liste de résultats peut être inversée. Nous recueillons toutes les valeurs de paramètres utilisées par certaines pages lorsqu'elles incluent un modèle donné. Nous stockons des paires de « valeur des paramètre du modèle » et « nom de page ». Ensuite, on trie le tableau et on imprime les paires. Si les éléments consécutifs d'un tableau ont la même première partie (c'est-à-dire que les valeurs des paramètres sont identiques), celle-ci n'est imprimée qu'une seule fois. Ainsi, nous pouvons construire un indice inversé simple. Le même mécanisme pourrait être appliqué à d'autres problèmes.


Voir aussi

  • Extension:HashTables - une extension très similaire pour l'utilisation des tables de hachage dans MediaWiki.
  • Extension:PhpTags Functions/Functions/Array - comprend plus de cinquante fonctions permettant de travailler avec les tableaux en utilisant la syntaxe PHP.
  • Extension:Variables
  • Extension:Page Forms - offre la fonction d'analyse #arraymap . Étant donné que les entrées et les sorties sont gérées par la même fonction, elle élimine le besoin de définir une clé.
  • Extension:WSArrays - fournit un ensemble de fonctions d'analyse syntaxique applicables sur les tableaux multidimensionnels et associatifs.
  • Extension:Scribunto - Scribunto qui vous permet d'intégrer les scripts Lua dans les pages wiki, fournit des tableaux et un flux de contrôle du langage de programmation immédiat standard.
  • Extension:ArrayFunctions - une alternative compatible avec Parsoid, qui fonctionne également avec des tableaux associatifs multidimensionnels.