帮助:解析函数/arrayintersect
arrayintersect
{{#arrayintersect: 新数组名 | 数组1 | ... | 数组n }}
- 官方文档:Extension:Arrays
计算多个数组的交集。出自扩展 Arrays BWIKI和各大Wiki平台广泛使用此扩展。<br>在遥远的未来,它可能与Mediawiki新的并行解析器不兼容,请参阅扩展主页了解更多信息。。
保留所有数组共有的元素。比如数组 a 为 orange, red, blue,数组 b 为 red, orange, yellow,则交集为 orange, red。
通常用于需要找出多组数据共同项的场景,如筛选同时满足多个条件的条目、查找多个分类的共同成员、对比多个查询结果的重叠部分等。
语法
{{#arrayintersect: 新数组名 | 数组1 | 数组2 | ... | 数组n }}
参数
- 新数组名
- 用于存储交集结果的数组变量名(区分大小写)
- 数组1, 数组2, ..., 数组n
- 至少需要两个已定义的数组名
- 结果以第一个数组为基准:保留其顺序和重复次数,仅过滤掉不在其他所有数组中的元素
效果
- 输出:无,不直接输出任何字符
- 效果:创建或更新指定名称的数组变量,存储交集结果;需配合
arrayprint等函数输出内容 - 比较规则:基于 PHP 的
array_intersect,按字符串值比较,区分大小写(red与Red视为不同元素) - 顺序保留:结果数组的元素顺序和重复次数完全遵循第一个数组,与后续数组无关
示例
定义数组:
{{#arraydefine: a | orange, orange, red, blue }}{{#arraydefine: b | red, red, red, red, orange, yellow, yellow }}{{#arraydefine: c | blue, red }}
| 代码 | 效果 |
|---|---|
{{#arrayintersect: x | a | b }}{{#arrayprint: x }}
|
[math]\displaystyle{ a ∩ b }[/math] = orange、orange、red |
{{#arrayintersect: y | b | a }}{{#arrayprint: y }}
|
[math]\displaystyle{ b ∩ a }[/math] = red、red、red、red、orange |
{{#arrayintersect: z | a | b | c }}{{#arrayprint: z }}
|
[math]\displaystyle{ a ∩ b ∩ c }[/math] = red |
边缘示例
| 代码 | 效果 | 说明 |
|---|---|---|
{{#arraydefine:empty|}}{{#arrayintersect:result|a|empty}}{{#arrayprint:result}}
|
任何数组与空数组的交集为空 | |
{{#arraydefine:same|red,red}}{{#arrayintersect:dup|same|same}}{{#arrayprint:dup}}
|
red、red | 数组与自身的交集保持原样(包括重复) |
{{#arraydefine:case1|Red}}{{#arraydefine:case2|red}}{{#arrayintersect:case|case1|case2}}{{#arrayprint:case}}
|
大小写敏感,Red ≠ red
|
底层代码
处理流程:
- 参数解析:提取新数组名和所有待求交集的数组名
- 数组验证:检查各数组是否已定义,未定义的视为空数组
- 交集计算:从第一个数组开始,依次与后续数组执行
array_intersect操作 - 键值保留:保留第一个数组的键和顺序,仅过滤出所有数组共有的值
- 字符串比较:元素比较基于
(string) $elem1 === (string) $elem2,区分大小写 - 存储结果:将交集结果存入指定的新数组名
- 返回空字符串:函数本身不产生任何输出
技术细节:
- 核心函数是 PHP 的 array_intersect
- 多个数组的交集通过递归调用实现:[math]\displaystyle{ ((A ∩ B) ∩ C) ∩ D }[/math]
- 第一个数组的内部键(索引)会被保留,影响后续基于键的操作
实际用例
- 一些Wiki使用了相关特性,如下所示这个静态列表可能在下列页面更改后过时,仅供批判性参考。

沪公网安备 31011002002714 号