FANDOM


48px-Emblem-notice.svg.png

待翻譯頁面

本頁面尚未翻譯完成,歡迎使用者協助翻譯。更多未譯頁面

此擴充功能在Fandom並未預設啟用,但可聯絡Fandom申請使用。

矩陣(正式名稱為ArrayExtensionArray)是指一系列或多欄多列排序的名單,而我們可以利用矩陣名稱('key')來叫用這陣列中的成員('values'),或利用矩陣創造一系列的Parser函數

功用

這個擴展功能包含以下的Parser函數:

組別 功能
架構矩陣 #arraydefine
提取矩陣 #arrayprint, #arrayindex, #arraysize, #arraysearch, #arraysearcharray and #arrayslice
修改矩陣 #arrayreset, #arrayunique and #arraysort
矩陣的互動 #arraymerge, #arrayunion, #arrayintersect and #arraydiff
Extension:HashTables的互動</br>(如果有啟用的話) #hashtoarray, #arraytohash

架構矩陣

arraydefine

這功能可以利用一系列的成員('values') 架構一個矩陣名稱('key')

語法:

{{#arraydefine:陣列名稱|成員|分隔字符|選項}}

備註:

  • 成員 是指以分隔字符隔開的一系列字串
  • 矩陣名稱將會代表著一系列的字串。
  • 分隔字符沒有特別定義的話將會被逗號(',')所預設。分隔字符可以是(i)一個字符,也可以是(ii)Perl的常用符號,例如: '/\s*,\s*/' (請參閱 preg_split)
  • 用戶可以定義一個矩陣為空白(參閱以下例子)
  • 用戶可以選擇矩陣成員的獨特(unique'),排序('sort'),和顯示('print') (參閱以下例子).
    • 選項只能在分隔字符被定義時才能使用。

例子:

矩陣'a'被定義為1個成員
{{#arraydefine:a|red}}
矩陣'b'被定義為4個成員(使用分隔字符',')
{{#arraydefine:b|orange,red ,yellow, yellow|}}
矩陣'c'被定義為空白
{{#arraydefine:c}}
矩陣'd'被定義為1個成員(不使用分隔字符)
{{#arraydefine:d|apple, pear}}
矩陣'e'被定義為1個成員(使用分隔字符';')
{{#arraydefine:e|apple, pear|;}}
矩陣'f' 被定義為3個成員(使用分隔字符/\s*[;,]\s*/)(限高級用戶)
{{#arraydefine:f|apple, pear;  orange|/\s*[;,]\s*/}}
陣列'b1' 被定義為3個成員(使用分隔字符',')(成員為獨特的('unique'),反向排序('sort=desc'),可被列印('print=list')。
{{#arraydefine:b|orange,red ,yellow, yellow|,|unique,sort=desc, print=list}}

提取arrays

arrayprint

這功能將會以自訂的格式分別輸出矩陣('key')的成員('values')。

語法:

{{#arrayprint: 矩陣名稱 | 分隔字符 | 成員代號 | 執行內容 | 選項 }}

備註:

  • '執行內容' 可以是任何的wikitext,模板,或是Parser函數。
  • 在'執行內容'中,不需要該意避免使用直線'|'的。系統將會於架構式中,搜索 成員代號 並在每次結束後取代為下一個。
  • 要是矩陣中的成員不能被顯示時,將會被取代為空白字符。
  • 預設的分隔字符是依據語言的,正常為英語的', '。

例子:

顯示 - 依據語言的預設分隔字符
{{#arrayprint:b}}
顯示 - 不用分隔字符
{{#arrayprint:b | }}
顯示 - 使用'<br/>'(新行)作為分隔字符
{{#arrayprint:b |<br/> }}
print=pretty 會使矩陣列出所有的成員,並以'和'(英文則會以and代表,視語言版本以定)分隔最後兩個的成員。另外,就算 分隔字符 沒有被設定,其他成員皆會以'、'(英文則會以逗號','代表,視語言版本以定)作分隔。此床之Pretty
{{#arrayprint:b ||@ |@ |print=pretty }}
附上連結路徑到分類
{{#arrayprint:b |<br/> |@@@@ |[[:Category:@@@@|@@@@]] }}
Define a Semantic MediaWiki property value
{{#arrayprint:b |<br/> |@@@@ |[[prop1::@@@@]] }}
附上Parser函數
{{#arrayprint:b |<br/> |@@@@ |length of @@@@:{{#len:@@@@}} }}
附上連參數的模板的使用
{{#arrayprint:b|<br/>|@@@@|{{template|prop2|@@@@}} }}

arrayindex

這功能可以提取矩陣名稱(key)內特定位置的成員(element)

語法:

{{#arrayindex:陣列名稱|位置|預設}}

注意:

  • 無效的位置(非數字, 非邏輯性)會得出空白的字串。
  • 位置由零開始算起,第一個位置為 0
  • 負數將當為由最後開始算起, 例如: -1 為最後一個位置。
  • 預設是當矩陣內容為空白,或不存存該矩陣或該矩陣位置時所預設的內容。

例子:

得出於 a 矩陣內的第三個成員
{{#arrayindex:a |2 }}
得出於 b 矩陣內的最後一個成員
{{#arrayindex:b |-1 }}
得出一個無效的預設值
{{#arrayindex:c |foo |bad value }}

arraysize

這功能可以得出矩陣內成員的數目 詳閱: http://www.php.net/manual/en/function.count.php

另外,這功能還可以避免矩陣的不存在或成員多少而影響得出來的結果。

語法:

{{#arraysize:key}}

例子:

傳回矩陣內成員數目
{{#arraysize:a}}
檢查矩陣的存在
{{#if: {{#arraysize:b}} | ''陣列已存在'' | ''陣列不存在'' }}

由於 {{#arraysize:b}} 會傳回陣列名稱 b 內的成員數目,所以如果陣列存在時,必定會傳回大於 1 這個值,將執行 ''陣列已存在'' 這句子,而如果陣列不存在時,必定會傳回0這個值,而執行 ''陣列不存在''

arraysearch

這功能主要是傳回'內容'在矩陣成員中的位置。另外如有需要,也可以由'位置'開始計算出'內容'在矩陣成員中的位置,(結果只會傳回'內容'在矩陣成員中的位置,而不會洞去你於'位置'所輸入的數值),當找不到你所要尋找之'內容'則會傳回 空白

執行內容1 和/或 執行內容2被指定動作時,如找到'內容'位置則執行內容1,如找不到'內容'位置則執行內容2。詳閱 http://www.php.net/manual/en/function.array-search.php

語法:

{{#arraysearch:矩陣名稱|內容|位置(選項) | 有:執行內容1(選項) | 無:執行內容2(選項) }}


例子:

傳回'內容'在矩陣成員中的位置 {{#arraysearch:b|white}} "空白"
{{#arraysearch:b|red}} 2
位置 {{#arraysearch:b|red|0}} 2
{{#arraysearch:b|red|2}} "空白"
正規表示式 匹配 {{#arraysearch:b|/low/}} (譯者不懂)
{{#arraysearch:b|/LOW/i}} - case insensitive (譯者不懂)
{{#arraysearch:b|low}} (譯者不懂)
選項 {{#arraysearch:b|white|0|有|無}}
{{#arraysearch:b|yellow|0|有|無}}

arraysearcharray

This function searches an array (identified by key) and creates a new array (identified by new_key) from the search with all the results. The search criteria value can be a string or a regular expression. If index is given the search will start there, limit can define the maximum search results. The parameter identified by transform can be used if value is a regular expression. It can transform the result of the matched entries into the new_key array like PHP preg_replace would do it.

語法:

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

Notes:

  • If value is a string the new_key array will only contain entries of exact this string.
  • Negative index values like -n can be used to search the last n entries only.
  • If Extension:Regex Fun is available within the wiki, Regex Funs e modifier can be used within the regex. This has nothing to do with PHPs e modifier (which would be a security breach). With active e modifier the transform string will be parsed after back-refs are inserted, after that it will replace the actual match.

例子:

Find all entries in array 'a' that start with A followed by a space and put them into a new array 'x'
{{#arraysearcharray:a |x |/^A\s.+/ }}
searching all entries of array 'a' which end with numbers and put the numbers only into a new array 'y'
{{#arraysearcharray:a |y |/^.*?(\d+)$/ |0 |-1 | $1 }}
searching all entries of array 'a' which end with numbers and put the length of these items into the new array (This requires Regex Fun extension).
{{#arraysearcharray:a |y |/^.*?\d+$/e |0 |-1 | {{#len:$0}} }}

arrayslice

This function extracts a sub-array from an array (identified by 'key') into a new array (identified by 'new_key'). See: http://www.php.net/manual/en/function.array-slice.php

語法:

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

Notes:

  • Offset indicates starting point of slice, it can be (i) non-negative number (ii) negative number for backwards index (e.g. the last element of the array's offset is -1). offset is different from index (which must be non-negative number)
  • Length indicates how many element to extract. If it is omitted, then the sequence will have everything from offset up until the end of the array.
  • If offset is no less than array size, empty array will be returned, if offset if no greater than negative array size, a new array with all elements will be returned

例子:

Extract a two-element slice starting from the element at offset 1
{{#arrayslice:x|b|1|2}}
Extract a two-element slice starting from the element at offset -2
{{#arraymerge:x|b|-2|2}}

改動arrays

此處將介紹如何直接改動其陣列內的架構以不新建一個新的陣列

arrayunique

此功能將轉換其陣列內成員為獨特而唯一的(無重覆並且不包括空白的成員)

請參閱: http://www.php.net/manual/en/function.array-unique.php

語法:

{{#arrayunique:key}}

例子:

設置轉換陣列
{{#arrayunique:b}}

arrayreset

此功能將重設特定的陣列或全部的陣列:

語法:

{{#arrayreset:}} <!-- will unset ALL arrays -->
{{#arrayreset:key1 |key2 |... |key-n }}

備註:

  • 利用arraysize去列出以上重設了的陣列將會傳回空白而非0,原因是它們被真正的重設掉,而不只是沒有成員。要簡單地重設一個陣列只諼{{#arraydefine:key}}
  • 於版本1.4(測試版)中是利用','分隔多個陣列以重設。

arraysort

This function sorts an array in the following order.

語法:

{{#arraysort:key|order}}

Note:

  • Each array element is being treated as a string, this means numbers might not be ordered as expected.

例子:

Sort an array
{{#arraysort:x|desc}}
Randomize an array
{{#arraysort:x|random}}
Reverse an array
{{#arraysort:x|reverse}}

交流

Functions which work with more than one array, creating one new array or overwriting an existing one as result. Since version 2.0, these functions can interact with more than just two arrays at a time. In case they deal with only one array, they simply create a copy of that array. Any non-existant arrays will simply be ignored by these functions.

arraymerge

此功能將會合併兩個或以上的陣列為一個。(請參閱:http://www.php.net/manual/en/function.array-merge.php)

語法:

{{#arraymerge:新陣列名稱 |陣列1 |陣列2 |... |陣列-n }}

例子:

合併兩個陣列(a+b=x)
{{#arraymerge:x |a |b }}
複製一個陣列(b=x)
{{#arraymerge:x |b }}

arrayunion

此功能將會合併兩個或以上的陣列為一個,並不會導入重覆的成員。

語法:

{{#arrayunion:新陣列名稱 |陣列1 |陣列2 |... |陣列-n }}

備註:

  • This is a set operator, i.e., the returned array is a set without duplicated values.
  • 這功能相當於整合了 arraymergearrayunique 的功能

例子:

Union of three arrays
{{#arrayunion:x |a |b |c }}

arraydiff

This function computes the (set theoretic) difference of two or more arrays. The result array is identified by new_key. The returned array is a set that contains elements of the first given array (identified by key1) which are not defined within any of the other arrays. See: http://www.php.net/manual/en/function.array-diff.php

語法:

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

Note:

  • This is a set operator, i.e. the returned array is a set without duplicated values.
  • This function can be used to test sub-class relation

例子:

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

arrayintersect

This function computes the set theoretic intersection of two or more given arrays. The result array is identified by new_key. See: http://www.php.net/manual/en/function.array-intersect.php

語法:

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

Note:

  • This is a set operator, i.e., the returned array is a set without duplicated values.

例子:

Intersect of three arrays put into new array x
{{#arrayintersect:x |a |b |c }}

常見問題

讀取陣列資料

利用#arrayprint循環擴展功能 可以重覆地讀取出Array內的資料元素

利用arrayprint

<!--先定義出array的資料-->
{{#arraydefine:colors|紅,天空藍,淺黃}}

<!--利用arrayprint以讀取資料-->
{{#arrayprint:colors||@@@@|
* '''''@@@@''''' 的字數有 '''{{#len:@@@@}}''' 隻字
}}

以下為預期所得出的結果:

  • 的字數有 1 隻字
  • 天空藍 的字數有 3 隻字
  • 淺黃 的字數有 2 隻字

for live 例子, follow this URL.


利用循環擴展功能以讀取資料

如需要更複雜的詳情, 請參閱循環擴展功能.

{{#arraydefine: colors | red;#FF0000, green;#00FF00, blue;#0000FF }}
{{
  #loop: i
  | 0                     <!-- loops start value for {{#var:i}} -->
  | {{#arraysize:colors}} <!-- number of loops -->
  | <nowiki/>
* {{
    #arraydefine: val | {{#arrayindex:colors | {{#var:i}} }} | ;

    }}<span style="color:{{#arrayindex: val | 1}}">{{
    #arrayindex: val | 0
    }}</span>
}}

以下為預期所得出的結果:

  • red
  • green
  • blue

重覆使用資料

就算該被定義的Array被列出了,於該頁面中還是可以繼續被使用而不需重新定義的。

另參閱

帮助及反馈


原文:[[1]]

除了特别提示,社区内容遵循CC-BY-SA 授权许可。