Extension:Arrays/ja

Arrays拡張機能(以前はArrayExtensionとして知られていた)は、配列を操作する追加のパーサ関数のセットを作成します.

関数
この拡張機能は以下のパーサー関数を定義します:



arraydefine
この関数は、'delimiter' で区切られた 'values' のリストを用いて、'key' で識別される配列を構築する. この変数は、後で他の関数からアクセスすることができます.

構文:

注記:
 * valuesはdelimiterで区切られた文字列のリストである.
 * 結果として得られる配列は、文字列の配列となります.
 * デリミタは、指定されなければ ',' です. デリミタは、文字列 (デリミタを囲む空白は切り取られます) または、例えば  (preg_split 参照) のような Perl 正規表現が使用できます.
 * ユーザーは空の配列を定義することができます（例参照）.
 * ユーザーは、ユニーク、ソート、プリントなどのオプションを指定することができます（例参照）.
 * オプションはデリミタも指定されない限り無視される.

例: 

arrayprint
この関数は、配列の値をカスタマイズ可能なフォーマットで表示します.

構文:

注記:
 * subject は、wiki のリンク、テンプレート、パーサー関数を受け付けます.
 * subjectの中では、パイプ文字' 'をエスケープする必要はありません. 全体の構成の中で、patternは検索され、各ループの現在の（エスケープされた）配列の値に置き換えられます.  最後に、文字列全体が解析され、delimiterをセパレータとして暗算された結果の配列に入れられる.
 * 表示すべき配列が存在しない場合、空文字列を返します (1.4 alpha で導入された、互換モードの一部).
 * 既定の区切り文字は言語に依存し、英語の場合は「 」です (2.0 で導入され、互換モードの一部となりました).

例:

arrayindex
この関数は、配列（keyで識別）の値を位置 index に表示します.

構文:

注記:
 * 無効なインデックス（非数値、境界外）は、空文字列を表示します.
 * インデックスは0ベース、つまり最初の要素のインデックスは0である.
 * 負のインデックスは、末尾から遠い要素を返します（例えば、 は配列の最後の要素になります）.
 * 配列が存在しない場合、配列内にキーが存在しない場合、 値が空文字列の場合は default が返されます.

例:

arraysize
この関数は、配列のサイズ（要素数）を返します.

https://php.net/function.count を参照 与えられた配列が存在しない場合、この関数の出力は数値ではなく空文字列になります. これにより、配列が存在するかどうかを確認することができます.

構文:

例:

arraysearch
この関数は、'index'パラメータで指定した位置から'key'パラメータで指定した配列の中で'value'が最初に現れるインデックスを返し、失敗した場合は空文字列を返す. yes および/または no が指定された場合、yes に設定された値が見つかれば展開し、そうでなければ no の値を展開する. https://php.net/function.array-search を参照

構文:

例:

arraysearcharray
この関数は、(keyで識別される)配列を検索し、すべての検索結果を含む(new_keyで識別される)新しい配列を作成します. 検索条件valueには、文字列または正規表現を指定することができる. もしindexが与えられれば、検索はそこから始まり、limitは検索結果の最大値を定義することができる. value が正規表現である場合、transform で識別されるパラメータを使用することができる. 一致したエントリの結果をPHP preg_replaceが行うようにnew_key配列に変換することができます.

構文:

注記:
 * value が文字列の場合、new_key 配列はこの文字列と完全に一致する項目のみを含みます.
 * のような負の index 値は、最後の n 項目のみを検索するために使用することができます.
 * もしがwiki内で利用可能であれば、Regex Funのe修飾子がregex内で利用できます. これはPHPのe修飾子とは関係ありません(セキュリティ違反になります).  アクティブなe修飾子を使うと、バックリファレンスが挿入された後、transform文字列が解析され、その後、実際のマッチを置き換えます.

例:

arrayslice
この関数は、配列（'1'で指定）から部分配列を取り出し、新しい配列（'2'で指定）に格納します.

https://php.net/function.array-slice を参照

構文:

注記:
 * オフセットはスライスの開始位置を示し、負でない数値、または後方インデックスを示す負の数値（例：配列の最後の要素のオフセットは -1）である. オフセットがインデックスと異なる（非負の数値でなければならない）.
 * Lengthは抽出する要素の数を示す. 省略した場合は、offset から配列の最後までを持つことになる.
 * offset が配列のサイズより小さくない場合は空の配列が返され、offset が配列の負のサイズより大きくない場合は、すべての要素を含む新しい配列が返されます.

例:

変更点
新しい配列を作成する代わりに、配列を直接変更する関数です.

arrayunique
この関数は、配列 (キーで識別) を集合 (重複しない、空要素なし) に変換します.

https://php.net/function.array-unique を参照

構文:

例:

arrayreset
この関数は、定義された配列の一部または全部を解除する.

構文:

注記:
 * これらにarraysizeを使うと、 の代わりに空の文字列が返されるので、実際には空ではなく未設定です. 配列を単純に空にするには、  を使用します.
 * バージョン 1.4 より前のアルファベット ' ' は、設定されていないはずの複数の配列を区切るために使用されます.

arraysort
この関数は、配列を次の順序でソートする.
 * - 並べ替えなし（デフォルト）
 * - 降順に表示（https://php.net/function.sort参照）
 * / - 昇順に表示（https://php.net/function.rsort参照）
 * - 順不同で表示（https://php.net/function.array-rand参照）
 * - 逆順に表示（https://php.net/function.array-reverse参照）

 Syntax: 

注:
 * 配列の各要素は文字列として扱われるため、数値が期待通りに並ばない可能性があります.

例:

相互作用
複数の配列を処理し、結果として新しい配列を作成したり、既存の配列を上書きしたりする関数です. バージョン2.0以降、これらの関数は一度に2つ以上の配列を扱うことができるようになりました. 1つの配列しか扱わない場合は、その配列のコピーを作成するだけです. 存在しない配列は、これらの関数では単に無視されます.

arraymerge
この関数は、2つ以上の配列の値を新しい配列（new_keyで識別）に結合します.

https://php.net/function.array-merge を参照

構文:

例:

arrayunion
この関数は、2つ以上の配列の値を、重複のない新しい配列（new_key で識別）にマージします.

構文:

注記:
 * これは集合演算子であり、返される配列は重複した値を持たない集合である.
 * これは、arraymergeをarrayuniqueで後払いするのと同じことです.

例:

arraydiff
この関数は，2つ以上の配列の（集合論的）差を計算する. 結果配列はnew_keyで識別される. 返される配列は、最初に指定された配列（key1 で識別）の要素で、他のどの配列にも定義されていないものを含む集合である. https://php.net/function.array-diff を参照

構文:

注:
 * これは集合演算子であり、返される配列は重複する値を含まない集合となります.
 * この関数は、サブクラス関係をテストするために使用することができます.

例:

arrayintersect
この関数は，2つ以上の配列の集合論的な交点を計算する. 結果配列はnew_keyで識別される. https://php.net/function.array-intersect を参照

構文:

注:
 * これは集合演算子であり、返される配列は重複した値を持たない集合である.

例:

設定
Arrays2.0では、2つの設定変数が導入されています.


 * $egArraysCompatibilityMode
 * (1.4 alphaでは$egArrayExtensionCompatbilityMode)trueに設定すると、互換モードが有効になり、古い ArrayExtension 1.3.2の挙動を可能な限り復活させます. これは、Version 2.0において、いくつかの破壊的な変更が導入されたためです.  そのため、この互換モードを使用することで、1.xから2.xのArraysエクステンションへの切り替えがスムーズに行えます.  デフォルトでは、互換モードは非アクティブです.  もし、以前にあなたのwiki内で古いArrayExtensionを使用していたならば、互換性モードなしでArraysに切り替える前に、そのリストを見て、テンプレートを調整した方がいいかもしれません.


 * $egArraysExpansionEscapeTemplates
 * テンプレートまたはパーサーの関数呼び出しによって、 に含まれる配列値内で置換されるべき文字のキーと値のペアのリストが含まれています. これらの特殊文字を置換してから値を展開することで、配列の値が周囲のMWコードに影響を与えることがなくなります.  そうでなければ、配列の値自体も解析されてしまいます. デフォルトでは、これは以下のテンプレートやパーサーの関数呼び出しで、以下の文字をエスケープします.
 * =  ("Template:=" は ' ' と表示されるはずです)
 * =  ("Template:!" は ' ' と表示されるはずです)
 * MW 1.24.0から、"Template:!"は新しいマジックワードである で目的を果たすため、作成する必要がなくなりました.
 * =  ("Template:((" は ' ' と表示されるはずです)
 * =  ("Template:))" は ' ' と表示されるはずです)
 * これらのテンプレートやパーサー関数があなたのwikiに存在することを確認するか、この変数を適宜変更してください. この設定を誤ると、配列の値でこれらの文字列を使用している場合、 が予期しない値を表示することがあります.
 * $egArraysExpansionEscapeTemplatesは単純にnullに設定することもできます. この場合、2.0以前の動作に戻り、これらの文字列を含む配列の値は、 の中で与えられたsubjectのコードを破ることになります. 互換モードが有効な場合は、常にnullに設定されているものとして扱われます.

よくある質問


配列要素への繰り返しアクセス
配列の要素にやを用いて繰り返しアクセスすることが可能である. 

arrayprintを使用
以下は、期待される出力です. その他の例は、旧テザーレス・ワールドWikiで見ることができます.



キーの再利用
一度定義した配列をプリントすれば、同じキーをさらに下の階層の配列に再利用することができます. この順序を守る限り、すべてのアレイに一意のキーを定義する必要はありません.



ループ拡張機能の使用
より複雑なタスクのために、拡張機能を使って配列の中をループすることが可能である.

次のようなものを出力します：


 * red
 * green
 * blue

との連携
配列にセマンティックデータを入力する方法は2つあります. 最初のソリューションであるセマンティックリザルトフォーマットは、より高速で信頼性が高く、レコードデータや1つのプロパティに対する複数の値を含む複雑なデータセットにも対応しています.

を使用
Semantic Result Formats (SRF) は、バージョン 1.6.1 で Array フォーマットを導入しました. これは、自動的に Extension:Arrays 配列に格納されるデータを問い合わせるために使用することができます. これは、配列内のセマンティックデータを扱うのに好ましいソリューションです. 詳細はsemantic-mediawiki.orgで確認できます.

例:



標準クエリの使用
上記の SRF ソリューションを使用できない場合、配列では、リスト 形式の SMW クエリの結果を使用して配列を生成することもできます.

例 A: クラス 'Color' のインスタンスのリストを作成するには

例 B: プロパティ 'has color' の値の一意なリストを作成するには

例 C: SWMクエリで生成される2次元配列（レコード型プロパティなど）に対応するため given a 2D array "red;#da2021, yellow;#fcff00, green;#00ff00"

1. 配列 'colors'を作成する

2. 'colors' の最初の要素を別の配列 'colors0' に分割する.

注記:
 * セマンティッククエリパラメータ
 * オプションは、セマンティッククエリの返された結果をすべて使い切るために使用されます.
 * オプションは、結果のエントリのセパレータを設定するために使用されます.
 * ページカラムを切り取る オプション

との連携
SMW の場合と同様に、Arrays 拡張機能を使用して 'DPL query の結果を保存することができます. [$url 例]では、結果リストを反転させる方法を示しています. 特定のページが特定のテンプレートを含むときに使用されるすべてのパラメータ値を収集します. テンプレートパラメータ値 と ページ名 のペアを保存します. そして、配列をソートしてペアを表示します. 連続した配列要素の最初の部分が同じ（つまりパラメータ値が同じ）場合、最初の部分は一度だけ表示されます. このように、単純な転置インデックスを構成することができる. 同じ仕組みは、他の問題にも応用できるはずだ.



関連項目

 * - MediaWikiでハッシュテーブルを使用するための非常によく似た拡張機能です.
 * - PHP の構文を使って配列を操作するための 50 以上の関数が含まれています.
 * - パーサー関数を提供します. 入力と出力が同じ関数で処理されるため、キーを定義する必要がなくなります.
 * - 多次元配列や連想配列を操作するためのパーサ関数群を提供します.
 * - Scribuntoは、WikipageにLuaスクリプトを埋め込むことができ、配列と標準的な命令型プログラミング言語の制御フローを提供します.
 * - a Parsoid-compatible alternative, that also works with multidimensional and associative arrays.
 * - a Parsoid-compatible alternative, that also works with multidimensional and associative arrays.