帮助:解析函数/arrayintersect
arrayintersect 是一个解析函数。帮助:解析函数页列出了所有解析函数的说明。
arrayintersect
计算多个数组的交集。出自扩展 Arrays BWIKI和各大Wiki平台广泛使用此扩展。<br>在遥远的未来,它可能与Mediawiki新的并行解析器不兼容,请参阅扩展主页了解更多信息。。
从“第一个数组”中过滤,仅保留那些在所有后续数组中都至少出现一次的元素;结果的顺序与重复次数完全沿用第一个数组,与其他数组无关。
语法
{{#arrayintersect:新数组名 | 数组1 |数组2 |... |数组n }}
至少需要两个数组参数。函数不直接输出,结果会写入 新数组名
,需配合 #arrayprint
按需输出。
数组项比较时,行为基于 PHP 函数array_intersect
:按字符串值比较,区分大小写(例如 red
与 Red
不同)。
示例
- 有数组a:
{{#arraydefine:a|orange, orange, red, blue}}
- 有数组b:
{{#arraydefine:b|red, red, red, red, orange, yellow, yellow}}
- 有数组c:
{{#arraydefine:c|blue, red}}
- a ∩ b :
{{#arrayintersect:x|a|b}}{{#arrayprint:x}}
→orange、orange、red
- b ∩ a :
{{#arrayintersect:y|b|a}}{{#arrayprint:y}}
→red、red、red、red、orange
- a ∩ b ∩ c :
{{#arrayintersect:z|a|b|c}}{{#arrayprint:z}}
→red
底层代码
- 实际效果等价于:从第一个数组开始,依次与后续数组做交集过滤;键与顺序保留自第一个数组。
- 求交集的核心函数是 PHP 的array_intersect 函数。其比较两个元素是否相同的标准是:
(string) $elem1 === (string) $elem2
,即对PHP语言的字符串转换表达相同。
- 实际用例
- 一些Wiki使用了相关特性,如下所示这个静态列表可能在下列页面更改后过时,仅供批判性参考。