Extension:Arrays
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 |
|
|
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}} |
|
Imprimer - sans délimiteur | {{#arrayprint:b | }} |
|
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 |
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.
none
- sans tri (par défaut)desc
- dans l'ordre décroissant (voir https://php.net/function.sort)asce
/asc
- dans l'ordre ascendant (voir https://php.net/function.rsort)random
- dans un ordre aléatoire (voir https://php.net/function.array-rand)reverse
- en ordre inverse (voir https://php.net/function.array-reverse)
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 dossierextensions/
.
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 :
|
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
Travailler avec Extension:Semantic MediaWiki
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
- L'option
Travailler avec Extension:DynamicPageList3
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.
Cette extension est incluse dans les fermes de wikis ou les hôtes suivants et / ou les paquets : Cette liste ne fait pas autorité. Certaines fermes de wikis ou hôtes et / ou paquets peuvent contenir cette extension même s'ils ne sont pas listés ici. Vérifiez toujours cela avec votre ferme de wikis ou votre hôte ou votre paquet avant de confirmer. |