帮助:解析函数/arraymerge
{{#arraymerge: 新数组名 | 数组1 | ... | 数组n }}
- 官方文档:Extension:Arrays
arraymerge
合并多个数组为一个数组。出自扩展 Arrays BWIKI和各大Wiki平台广泛使用此扩展。<br>在遥远的未来,它可能与Mediawiki新的并行解析器不兼容,请参阅扩展主页了解更多信息。。
比如将数组 a=[orange] 和 b=[red, red] 合并为 x=[orange, red, red],元素会按顺序依次追加,且保留重复元素。
通常用于需要整合多个来源数据的场景,如合并多次 SMW 查询结果、整合不同分类的条目列表、汇总多个模板参数等批量数据处理任务。
语法
{{#arraymerge: 新数组名 | 数组1 | 数组2 | ... | 数组n }}
参数
- 新数组名
- 存放合并结果的目标数组名称(区分大小写)
- 数组1..n
- 要合并的已定义数组,至少需要两个
效果
- 输出:不输出任何字符
- 效果:创建或更新指定名称的数组变量,将所有源数组的元素按顺序依次追加到新数组中。合并规则遵循 PHP 的
array_merge:- 数字键会重新编号(0, 1, 2...)
- 字符串键保留原名(同名键时后者覆盖前者)
- 不会自动去重,保留所有元素包括重复项
示例
先定义数组abc:
- a:
{{#arraydefine:a|orange}} - b:
{{#arraydefine:b|red, red}} - c:
{{#arraydefine:c|blue, blue}}
| 代码 | 结果数组内容 |
|---|---|
{{#arraymerge:x|a|b}}
|
x = orange、red、red |
{{#arraymerge:x|c|a}}
|
x = blue、blue、orange |
{{#arraymerge:x|a|b|c}}
|
x = orange、red、red、blue、blue |
{{#arraymerge:x|b|c}}
|
x = red、red、blue、blue(保留重复) |
使用场景
arraymerge 的典型应用场景是需要汇总多个数据源但保留原始顺序和重复项时,例如:
合并多次查询结果
当一次 SMW 查询无法满足复杂条件时,可分别查询后合并:
{{#arraydefine:list1|{{#ask:[[分类:帮助]]|link=none|limit=5|searchlabel=}}}}
{{#arraydefine:list2|{{#ask:[[分类:文档]]|link=none|limit=5|searchlabel=}}}}
{{#arraymerge:allItems|list1|list2}}
{{#arrayprint:allItems|、|@@@|[[@@@]]}}
整合模板多个参数
将用户传入的多个列表参数合并为统一数组处理:
{{#arraydefine:fruits|{{{水果|}}}}}
{{#arraydefine:vegetables|{{{蔬菜|}}}}}
{{#arraymerge:allFood|fruits|vegetables}}
逐步构建复杂列表
在循环或条件判断中分步构建最终数据集:
{{#arraydefine:base|基础项1,基础项2}}
{{#if:{{{扩展|}}}|
{{#arraydefine:extra|{{{扩展}}}}}
{{#arraymerge:final|base|extra}}
|
{{#arraydefine:final|base}}
}}
底层代码
处理流程:
- 参数解析:提取新数组名和所有源数组名
- 数组验证:检查所有源数组是否已定义
- 顺序合并:从第一个源数组开始,使用 PHP 的
array_merge逐一合并后续数组 - 键处理:数字键重新编号,字符串键保留(同名时后者覆盖前者)
- 存储结果:将合并后的数组存入解析器上下文,以新数组名标识
- 返回空串:函数本身不输出任何内容
实际用例
- 一些Wiki使用了相关特性,如下所示这个静态列表可能在下列页面更改后过时,仅供批判性参考。

沪公网安备 31011002002714 号