Extension:Arrays/cs

Varování Varování: Toto rozšíření není kompatibilní s plány na paralelní analýzu, jak je zamýšleno použitím Parsoid . Budoucnost tohoto rozšíření je proto nejistá a očekává se, že se během několika let stane nekompatibilním se standardním analyzátorem MediaWiki. Další informace naleznete v části T250963 a Žádná podpora pro sekvenční zpracování značek rozšíření .
Category:MIT licensed extensions/cs
Příručka k rozšířením MediaWiki
Arrays
Stav rozšíření: stabilníCategory:Stable extensions/cs
Implementace Funkce analyzátoru Category: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
  • $wgArraysCompatibilityMode
  • $wgArraysExpansionEscapeTemplates
Č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
Category:All extensions/cs

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}}
  • orange, red, yellow, yellow
Tisk - bez oddělovače
{{#arrayprint:b | }}
  • orangeredyellowyellow
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

red

yellow

yellow

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í.

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žce extensions/.
    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.
  • Yes 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 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:

  • délka Red: 3
  • délka Blue: 4
  • délka Yellow: 6

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

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

Category:Array extensions/cs Category:Number extensions/cs Category:Modifiable variables extensions/cs
Category:All extensions/cs Category:Array extensions/cs Category:Extensions in Wikimedia version control/cs Category:Extensions included in BlueSpice/cs Category:Extensions included in Canasta/cs Category:Extensions included in Fandom/cs Category:Extensions included in Miraheze/cs Category:Extensions included in ProWiki/cs Category:Extensions included in WikiForge/cs Category:Extensions included in semantic::core/cs Category:Extensions included in wiki.gg/cs Category:Extensions with manual MediaWiki version Category:MIT licensed extensions/cs Category:Modifiable variables extensions/cs Category:Number extensions/cs Category:ParserClearState extensions/cs Category:ParserFirstCallInit extensions/cs Category:Parser function extensions/cs Category:Stable extensions/cs