Extension:Arrays/cs
![]() Stav rozšíření: stabilníCategory:Stable extensions/cs |
|
---|---|
Implementace | Funkce analyzátoruCategory:Parser function extensions/cs |
Popis | Vylepšuje analyzátor pomocí funkcí pole. |
Autoři | Li Ding, Jie Bao, Daniel Werner |
Nejnovější verze | 2.2.1 (2020-12-08) |
MediaWiki | 1.31+Category:Extensions with manual MediaWiki version |
Změny v databázi | Ne |
Licence | Licence MIT |
Stáhnout | Category:Extensions in Wikimedia version control/cs README CHANGELOG |
|
|
Čtvrtletní stahování | 31 (Ranked 82nd) |
Přeložte rozšíření Arrays, používá-li lokalizaci z translatewiki.net | |
Problémy | Otevřené úkoly · Nahlásit chybu |
Rozšíření Arrays (dříve známé jako ArrayExtension) vytváří další sadu funkcí analyzátoru, které fungují na pole.
Funkce
Toto rozšíření definuje následující funkce analyzátoru:
Skupina | Funkce |
---|---|
Vytvořte pole (s jedinečnými možnostmi řazení, tisku) | #arraydefine |
Extrahujte informace z pole | #arrayprint , #arrayindex , #arraysize , #arraysearch , #arraysearcharray , #arrayslice |
Změňte pole | #arrayreset , #arrayunique , #arraysort |
Interakce mezi několika poli | #arraymerge , #arrayunion , #arrayintersect , #arraydiff |
V případě, že je nainstalován Extension:HashTables , pro interakci pole/hash-tabulka | #hashtoarray , #arraytohash |
Konstrukce polí
arraydefine
Tato funkce vytvoří pole (identifikované "klíčem") pomocí seznamu "hodnot" oddělených "oddělovačem". K proměnné lze později přistupovat dalšími funkcemi.
Syntaxe:
{{#arraydefine:klíč | hodnota | oddělovač | možnosti}}
Poznámky:
- "hodnoty" je seznam řetězců oddělených "oddělovačem".
- Výsledné pole je pole řetězců.
- Výchozí oddělovač je
,
, pokud není zadán, oddělovačem může být řetězec (mezery kolem oddělovače budou oříznuty) nebo regulární výraz Perl, např./\s*,\s*/
(viz preg_split). - Uživatelé mohou definovat prázdné pole (viz příklad).
- Uživatelé mohou specifikovat možnosti včetně jedinečných, řazení a tisku (viz příklad).
- Možnosti jsou ignorovány, pokud není zadán také oddělovač.
Příklady:
Definujte jednoprvkové pole s názvem a |
{{#arraydefine:a|red}} |
Definujte čtyřprvkové pole s názvem b , použijte výchozí oddělovač (, ) |
{{#arraydefine:b|orange, red, yellow, yellow}} |
Definujte/nastavte prázdné pole s názvem c |
{{#arraydefine:c}} |
Definujte dvouprvkové pole s názvem d pomocí ; jako oddělovače |
{{#arraydefine:d|apple; pear|;}} |
Definujte tříprvkové pole s názvem e pomocí regulárního výrazu /\s*[;,]\s*/ jako oddělovače |
{{#arraydefine:e|apple, pear; orange|/\s*[;,]\s*/}} |
Definujte tříprvkové pole s názvem f , použijte oddělovač (, ), možnosti "unique, sort=desc, print=list" (prvky pole jsou jedinečné, seřazené v sestupném pořadí a tisknou se). Další hodnoty typu opce viz #arraysort. |
{{#arraydefine:f|orange, red, yellow, yellow |, |unique, sort=desc, print=list}} |
Práce s poli
Extrakce
arrayprint
Tato funkce vytiskne hodnoty pole v přizpůsobitelném formátu.
Syntaxe:
{{#arrayprint:key|delimiter|pattern|subject|options}}
Poznámky:
- subject přijímá wiki odkazy, šablony a funkce parseru.
- V rámci subject nemusíte escapovat znaky
|
. V rámci celého konstruktu bude pattern prohledán a nahrazen aktuální (escaped) hodnotou pole každé smyčky. Nakonec bude celý řetězec analyzován a vložen do pole výsledků, které bude implodováno s delimiter jako separátorem. - V případě, že pole, které má být vytištěno neexistuje, bude vrácen prázdný řetězec (zavedeno v 1.4 alpha, součást režimu kompatibility).
- Výchozí oddělovač je závislý na jazyce, pro angličtinu je to
,
(zavedeno ve verzi 2.0, součást režimu kompatibility).
Příklady:
Úloha | Příklad kódu | Výstup (pole b je definováno výše) |
---|---|---|
Tisk - pomocí výchozího oddělovače seznamu podle jazyka | {{#arrayprint:b}} |
|
Tisk - bez oddělovače | {{#arrayprint:b | }} |
|
Tisk - pomocí <br /> (zalomení řádku) jako oddělovače |
{{#arrayprint:b |<br/> }} |
orange
red yellow yellow |
Výstup pěkného seznamu, kde jsou poslední dva prvky zřetězeny and (nebo ekvivalentem v místních jazycích). I když je parametr delimiter prázdný, použije se , (nebo jazykový ekvivalent), protože jinak by to nebylo hezké. |
{{#arrayprint:b ||@ |@ |print=pretty }} |
|
Vložit odkaz na wiki do kategorií | {{#arrayprint:b |<br/> |@@@@ |[[:Category:@@@@|@@@@]] }} |
orange |
Definujte hodnotu vlastnosti Semantic MediaWiki | {{#arrayprint:b |<br/> |@@@@ |[[prop1::@@@@]] }} |
|
Vložit funkci analyzátoru | {{#arrayprint:b |<br/> |@@@@ |length of @@@@:{{#len:@@@@}} }} |
|
Vložit šablonu (s parametry) | {{#arrayprint:b|<br/>|@@@@|{{template|prop2|@@@@}} }} |
arrayindex
Tato funkce vytiskne hodnotu pole (identifikovaného key) na pozici index.
Syntaxe:
{{#arrayindex:key|index|default}}
Poznámky:
- Neplatný index (bez čísla, mimo rámec) bude mít za následek vytištění prázdného řetězce.
- Index je založen na 0, tj. index prvního prvku je 0.
- Záporné indexy vrátí prvek, který je daleko od konce (např.
-1
by byl posledním prvkem pole). - default bude vráceno v případě, že pole neexistuje, klíč v poli neexistuje nebo pokud je hodnota prázdný řetězec.
Příklady:
Třetí prvek v poli a | {{#arrayindex:a |2 }} |
Poslední prvek v poli b | {{#arrayindex:b |-1 }} |
Vytisknout výchozí hodnotu pro neplatný index | {{#arrayindex:c |foo |bad value }} |
arraysize
Tato funkce vrací velikost (počet prvků) pole.
Podívejte se na https://php.net/function.count V případě, že dané pole neexistuje, bude výstupem funkce místo čísla prázdný řetězec. To umožňuje zkontrolovat, zda pole existuje.
Syntaxe:
{{#arraysize:key}}
Příklady:
Velikost pole a: | {{#arraysize:a}} |
Zkontrolujte, zda pole a existuje nebo ne: | {{#if: {{#arraysize:a}} | ''pole existuje'' | ''pole není definováno'' }} |
arraysearch
Tato funkce vrací index prvního výskytu value
v poli (identifikováno key
) počínaje pozicí identifikovanou parametrem index
a v případě selhání vrátí prázdný řetězec.
Když je zadáno yes a nebo no, rozšíří se tím nastavená hodnota na yes, pokud bude nalezena, v opačném případě na hodnotu no.
Podívejte se na https://php.net/function.array-search
Syntaxe:
{{#arraysearch:key|value|index|yes|no}}
Příklady:
Návratový index prvního výskytu hodnoty | {{#arraysearch:b|white}} {{#arraysearch:b|red}} použít offset {{#arraysearch:b|red|0}} {{#arraysearch:b|red|2}} použijte preg shodu s regulárním výrazem {{#arraysearch:b|/low/}} {{#arraysearch:b|/LOW/i}} - nerozlišuje malá a velká písmena {{#arraysearch:b|low}} použijte ano ne pro možnost tisku {{#arraysearch:b|white|0|yes|no}} {{#arraysearch:b|yellow|0|yes|no}} |
arraysearcharray
Tato funkce prohledá pole (identifikované key) a vytvoří nové pole (identifikované new_key) z vyhledávání se všemi výsledky. Kritériem vyhledávání value může být řetězec nebo regulární výraz. Pokud je zadáno index, vyhledávání začne tam, limit může definovat maximální výsledky vyhledávání. Parametr identifikovaný transform lze použít, pokud je value regulární výraz. Dokáže transformovat výsledek odpovídajících položek do pole new_key, jako by to udělal PHP preg_replace.
Syntaxe:
{{#arraysearcharray:new_key|key|value|index|limit|transform}}
Poznámky:
- Pokud je value řetězec, pole new_key bude obsahovat pouze položky přesně tohoto řetězce.
- Záporné hodnoty index jako
-n
lze použít pouze k vyhledávání posledních n záznamů. - Pokud je na wiki k dispozici Extension:Regex Fun , lze v regulárním výrazu použít modifikátor e Regex Fun. To nemá nic společného s modifikátorem e PHP (což by bylo porušením zabezpečení). S aktivním modifikátorem e bude řetězec transform analyzován po vložení zpětných odkazů, poté nahradí skutečnou shodu.
Příklady:
Najděte všechny položky v poli a , které začínají A následované mezerou, a vložte je do nového pole x . |
{{#arraysearcharray:x |a |/^A\s.+/ }} |
Prohledá všechny položky pole a , které končí čísly a vloží čísla pouze do nového pole y . |
{{#arraysearcharray:y |a |/^.*?(\d+)$/ |0 |-1 | $1 }} |
Prohledání všech položek pole a , které končí čísly a vložení délky těchto položek do nového pole (to vyžaduje rozšíření Regex Fun). |
{{#arraysearcharray:y |y |/^.*?\d+$/e |0 |-1 | {{#len:$0}} }} |
Odstraňte prázdné hodnoty z pole a . |
{{#arraysearcharray:a|a|/\S+/}} |
arrayslice
Tato funkce extrahuje dílčí pole z pole (identifikovaného key
) do nového pole (označeného new_key
).
Podívejte se na https://php.net/function.array-slice
Syntaxe:
{{#arrayslice:new_key|key|offset|length}}
Poznámky:
- Offset označuje počáteční bod řezu, může to být nezáporné číslo nebo záporné číslo pro zpětný index (např. poslední prvek offsetu pole je -1). Posun se liší od indexu (což musí být nezáporné číslo)
- Délka udává, kolik prvků se má extrahovat. Pokud je vynechán, bude mít sekvence vše od offsetu až po konec pole.
- Pokud offset není menší než velikost pole, bude vráceno prázdné pole, pokud offset není větší než záporná velikost pole, bude vráceno nové pole se všemi prvky.
Příklady:
Extrahujte dvouprvkový řez počínaje prvkem s odsazením 1. | {{#arrayslice:x|b|1|2}} |
Extrahujte dvouprvkový řez počínaje prvkem s odsazením -2. | {{#arrayslice:x|b|-2|2}} |
Změna
Funkce, které mění pole přímo namísto vytváření nového pole.
arrayunique
Tato funkce převede pole (identifikované 'klíčem') na množinu (žádné duplicitní členy, žádný prázdný prvek).
Podívejte se na https://php.net/function.array-unique
Syntaxe:
{{#arrayunique:key}}
Příklad:
Převést pole na sadu. | {{#arrayunique:b}} |
arrayreset
Tato funkce zruší nastavení některých nebo všech definovaných polí.
Syntaxe:
{{#arrayreset:}} <!-- zruší nastavení VŠECH polí -->
{{#arrayreset:key1 |key2 |... |key-n }}
Poznámky:
- Když na ně použijete arraysize, vrátí se prázdný řetězec místo
0
, takže jsou skutečně nenastavené, nikoli prázdné. K jednoduchému vyprázdnění pole lze použít{{#arraydefine:key}}
. - Před verzí 1.4 se alfa
,
používá k oddělení několika polí, která by měla být deaktivována.
arraysort
Tato funkce seřadí pole v následujícím pořadí.
none
- žádné řazení (výchozí)desc
- v sestupném pořadí (viz https://php.net/function.sort)asce
/asc
- vzestupně (viz https://php.net/function.rsort)random
- v náhodném pořadí (viz https://php.net/function.array-rand)reverse
- v opačném pořadí (viz https://php.net/function.array-reverse)
Syntaxe:
{{#arraysort:key|order}}
Poznámka:
- Každý prvek pole je považován za řetězec, což znamená, že čísla nemusí být uspořádána podle očekávání.
Příklady:
Seřadit pole. | {{#arraysort:x|desc}} |
Randomizujte (seřadit náhodně) pole. | {{#arraysort:x|random}} |
Obrátit pole. | {{#arraysort:x|reverse}} |
Interakce
Funkce, které pracují s více než jedním polem, ve výsledku vytvářejí jedno nové pole nebo přepisují existující. Od verze 2.0 mohou tyto funkce spolupracovat s více než jen dvěma poli současně. V případě, že se zabývají pouze jedním polem, jednoduše vytvoří kopii tohoto pole. Jakákoli neexistující pole budou těmito funkcemi jednoduše ignorována.
arraymerge
Tato funkce sloučí hodnoty dvou nebo více polí do nového pole (označeného new_key).
Podívejte se na https://php.net/function.array-merge
Syntaxe:
{{#arraymerge:new_key |key1 |key2 |... |key-n }}
Příklady:
Sloučit dvě pole. | {{#arraymerge:x |a |b }} |
Duplikujte pole (třetí argument arraymerge ponechte prázdný). | {{#arraymerge:x |b }} |
arrayunion
Tato funkce sloučí hodnoty dvou nebo více polí do nového pole (označeného new_key) bez duplicitních hodnot.
Syntaxe:
{{#arrayunion:new_key |key1 |key2 |... |key-n }}
Poznámky:
- Toto je operátor množiny, tj. vrácené pole je množina bez duplicitních hodnot.
- To se rovná arraymerge a poté arrayunique.
Příklad:
Spojení tří polí. | {{#arrayunion:x |a |b |c }} |
arraydiff
Tato funkce počítá (teoretický rozdíl) dvou nebo více polí. Pole výsledků je označeno new_key. Vrácené pole je sada, která obsahuje prvky prvního daného pole (identifikovaného key1), které nejsou definovány v žádném jiném poli. Podívejte se na https://php.net/function.array-diff
Syntaxe:
{{#arraydiff:new_key |key1 |key2 |... |key-n }}
Poznámka:
- Toto je operátor množiny, tj. vrácené pole je množina bez duplicitních hodnot.
- Tuto funkci lze použít k testování vztahu podtřídy.
Příklady:
Rozdíl (b-a) | {{#arraydiff:x |b |a }} |
Rozdíl (a-b) | {{#arraydiff:x |a |b }} |
Rozdíl (a-(b+c)) | {{#arraydiff:x |a |b |c }} |
arrayintersect
Tato funkce počítá teoretický průnik množin dvou nebo více daných polí. Pole výsledků je označeno new_key. Podívejte se na https://php.net/function.array-intersect
Syntaxe:
{{#arrayintersect:new_key |key1 |key2 |... |key-n }}
Poznámka:
- Toto je operátor množiny, tj. vrácené pole je množina bez duplicitních hodnot.
Příklad:
Průnik tří polí vložených do nového pole x | {{#arrayintersect:x |a |b |c }} |
Instalace
- Stáhněte soubor/y a vložte je do adresáře pojmenovaného
Arrays
ve vaší složceextensions/
.
Vývojáři a přispěvatelé kódu by si místo toho měli nainstalovat rozšíření from Git pomocí:cd extensions/
git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/Arrays - Na konec vašeho souboru LocalSettings.php přidejte následující kód:
wfLoadExtension( 'Arrays' );
- Vyžaduje nastavení v konfiguračním souboru.
Dokončeno – Přejděte na stránku Special:Version vaší wiki a zkontrolujte, zda bylo rozšíření úspěšně nainstalováno.
Konfigurace
Arrays 2.0 zavádí dvě konfigurační proměnné:
- $egArraysCompatibilityMode
- ($egArrayExtensionCompatbilityMode v 1.4 alpha) Nastavením na true se aktivuje režim kompatibility, který co nejvíce vrátí chování staré ArrayExtension 1.3.2. Je to proto, že ve verzi 2.0 bylo zavedeno několik přelomových změn. Takže použití tohoto režimu kompatibility umožňuje hladký přechod z rozšíření 1.x na 2.x Arrays. Ve výchozím nastavení je režim kompatibility neaktivní. Pokud jste na své wiki dříve používali starou verzi ArrayExtension, možná byste se měli podívat na tento seznam a upravit své šablony, než přepnete na Arrays bez režimu kompatibility.
- $egArraysExpansionEscapeTemplates
- Obsahuje seznam párů klíč–hodnota znaků, které by měly být nahrazeny voláním šablony nebo funkce analyzátoru v rámci hodnot pole zahrnutých do #arrayprint. Nahrazením těchto speciálních znaků před zahrnutím hodnot do řetězce, který se následně rozšiřuje, nemohou hodnoty pole odvádět pozornost okolního MW kódu. Jinak by byly analyzovány i samotné hodnoty pole. Ve výchozím nastavení to bude escapovat následující znaky s následujícími voláními funkce šablony nebo analyzátoru:
=
={{=}}
("Template:=" by mělo vytisknout=
)|
={{!}}
("Template:!" by mělo vytisknout|
)
Poznámka: Počínaje MW 1.24.0 již není nutné vytvářet "Template:!", protože jeho účelu slouží nové magické slovo
{{!}}
.
{{
={{((}}
("Template:((" by mělo vytisknout{{
)}}
={{))}}
("Template:))" by mělo vytisknout}}
)
- Ujistěte se, že tyto šablony nebo funkce analyzátoru existují ve vaší wiki, nebo podle toho změňte tuto proměnnou. Pokud toto není správně nastaveno, může
#arrayprint
vytisknout neočekávané hodnoty v případě, že se jedna z těchto sekvencí znaků používá v hodnotách pole. - $egArraysExpansionEscapeTemplates lze také jednoduše nastavit na null, v tomto případě se přepne zpět na chování před 2.0, kde hodnoty pole s těmito sekvencemi znaků porušily daný kód subject v rámci
#arrayprint
. Pokud je režim kompatibility aktivní, bude to vždy považováno za null.
FAQ
Iterativní přístup k prvkům pole
Je možné iterativně přistupovat k prvkům pole pomocí #arrayprint nebo Extension:Loops .
Použití arrayprint
<!-- definování pole -->
{{#arraydefine:colors|Red,Blue,Yellow}}
{{#arrayprint:colors||@@@@|<nowiki/>
* délka @@@@: {{#len:@@@@}}
}}
Níže je očekávaný výstup:
|
Další příklady lze nalézt na bývalé Wiki Tetherless World.
Opětovné použití klíčů
Jakmile je vytištěno dříve definované pole, lze stejný klíč znovu použít pro další pole níže na stránce. Dokud je tato sekvence dodržena, není třeba definovat jedinečný klíč pro každé pole.
Použití rozšíření Loops
Pro složitější úlohy je možné procházet polem pomocí rozšíření Loops .
{{ #arraydefine: colors | red;#FF0000, green;#00FF00, blue;#0000FF }}
{{
#loop: i
| 0 <!-- počáteční hodnota smyček pro {{ #var:i }} -->
| {{ #arraysize:colors }} <!-- počet smyček -->
| <nowiki/>
* {{
#arraydefine: val | {{ #arrayindex:colors | {{ #var:i }} }} | ;
}}
<span style="color:{{ #arrayindex: val | 1 }}">
{{ #arrayindex: val | 0 }}
</span>
}}
Výsledkem by bylo něco jako:
- red
- green
- blue
Práce se Rozšíření:Semantic MediaWiki
Existují dva způsoby naplnění pole sémantickými daty. První řešení využívající formáty sémantických výsledků je rychlejší a spolehlivější a také pracuje se složitými datovými sadami včetně záznamů a více hodnot pro jednu vlastnost.
Použití Extension:Semantic Result Formats
Semantic Result Formats (SRF) zavádí formát Array ve verzi 1.6.1. Lze jej použít k dotazování na data, která budou automaticky uložena v poli Extension:Arrays. Toto je preferované řešení zabývající se sémantickými daty v polích. Podrobnosti najdete na semantic-mediawiki.org.
Příklad:
{{#ask: [[Category:Color]][[:+]] |format=array |name=colors}} {{#arrayprint: colors}}
Použití standardního dotazu
Pokud nemůžete použít řešení SRF výše, Arrays také umožňuje naplnit pole pomocí výsledku dotazu SMW ve formátu list:
Příklad A: Chcete-li vytvořit seznam instancí třídy Color
{{#arraydefine:colors|{{#ask:[[Category:Color]][[:+]] |sep =, |limit=1000}} }}
Příklad B: Chcete-li vytvořit jedinečný seznam hodnot vlastnosti has color
{{#arraydefine:colors|{{#ask:[[has color::+]][[:+]] |?color= |mainlabel=- |sep =, |limit=1000}} |,|unique}}
Příklad C: Zacházet s 2D polem generovaným dotazem SWM (např. vlastnost typu záznamu)
given a 2D array "red;#da2021, yellow;#fcff00, green;#00ff00" 1. vytvořte řádek <code>colors</code> {{#arraydefine:colors|red;#da2021, yellow;#fcff00, green;#00ff00}} 2. rozdělte první prvek '<code>colors</code>' do jiného pole <code>colors0</code> {{#arraydefine:color0|{{#arrayindex:colors|0}}|;}}
Poznámky:
- parametry sémantického dotazu
- Volba
limit=1000
se používá k vyčerpání všech vrácených výsledků sémantického dotazu - Volba
sep=,
se používá k nastavení oddělovače pro záznamy výsledků mainlabel=-
možnost oříznout sloupec stránky
- Volba
Práce s Rozšíření:DynamicPageList3
Podobným způsobem, jak je popsáno výše pro SMW, lze rozšíření Arrays použít k ukládání výsledků DPL dotazu. Seznam výsledků lze invertovat. Shromažďujeme všechny hodnoty parametrů, které používají určité stránky, když obsahují danou šablonu. Ukládáme dvojice hodnota parametru šablony a název stránky. Poté pole seřadíme a vytiskneme dvojice. Pokud po sobě jdoucí prvky pole mají stejnou první část (tj. hodnoty parametrů jsou identické), první část se vytiskne pouze jednou. Můžeme tedy sestavit jednoduchý invertovaný index. Stejný mechanismus lze použít i na jiné problémy.
Související odkazy
- Extension:HashTables - velmi podobné rozšíření pro použití hash tabulek v MediaWiki.
- Extension:PhpTags Functions/Functions/Array - obsahuje více než padesát funkcí pro práci s poli pomocí syntaxe PHP.
- Extension:Variables
- Rozšíření:Page Forms - nabízí funkci analyzátoru #arraymap . Protože vstup a výstup jsou řešeny stejnou funkcí, odpadá nutnost definovat klíč.
- Extension:WSArrays - poskytuje sadu funkcí analyzátoru pro práci s vícerozměrnými a asociativními poli.
- Rozšíření:Scribunto - Scribunto, které vám umožňuje vkládat skripty Lua do wikistránek, které poskytují pole a standardní tok kontroly imperativního programovacího jazyka.
- Extension:ArrayFunctions - alternativa kompatibilní s Parsoidem, která také pracuje s vícerozměrnými a asociativními poli.
![]() | Toto rozšíření je zahrnuto v následujících wiki farmách/hostitelích a/nebo balíčcích:
|