You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高效拆分两个字符串并生成所有值的组合(MediaWiki模板)

高效实现MediaWiki模板中多参数值的全组合分类生成

问题场景

我在MediaWiki模板里有两个参数location和locality_subjects,每个参数都支持多个用分号分隔的值,示例如下:

|location=Bucks County, Pennsylvania;Chester County, Pennsylvania
|locality_subjects=Court records;Probate records;Vital records

需要为这两个参数的所有值组合生成分类链接,预期输出如下:

[[Category:Bucks County, Pennsylvania, court records]]
[[Category:Bucks County, Pennsylvania, probate records]]
[[Category:Bucks County, Pennsylvania, vital records]]
[[Category:Chester County, Pennsylvania, court records]]
[[Category:Chester County, Pennsylvania, probate records]]
[[Category:Chester County, Pennsylvania, vital records]]

目前我假设每个参数最多包含4个值,用硬编码的方式逐个写出所有组合,代码非常冗余:

[[Category:{{#explode:{{{location|}}}|;|0}}, {{#explode:{{lc:{{{locality_subjects|}}}|;|0}}]]
[[Category:{{#explode:{{{location|}}}|;|0}}, {{#explode:{{lc:{{{locality_subjects|}}}|;|1}}]]
[[Category:{{#explode:{{{location|}}}|;|0}}, {{#explode:{{lc:{{{locality_subjects|}}}|;|2}}]]
[[Category:{{#explode:{{{location|}}}|;|0}}, {{#explode:{{lc:{{{locality_subjects|}}}|;|3}}]]
[[Category:{{#explode:{{{location|}}}|;|1}}, {{#explode:{{lc:{{{locality_subjects|}}}|;|0}}]]
[[Category:{{#explode:{{{location|}}}|;|1}}, {{#explode:{{lc:{{{locality_subjects|}}}|;|1}}]]
[[Category:{{#explode:{{{location|}}}|;|1}}, {{#explode:{{lc:{{{locality_subjects|}}}|;|2}}]]
[[Category:{{#explode:{{{location|}}}|;|1}}, {{#explode:{{lc:{{{locality_subjects|}}}|;|3}}]]
[[Category:{{#explode:{{{location|}}}|;|2}}, {{#explode:{{lc:{{{locality_subjects|}}}|;|0}}]]
[[Category:{{#explode:{{{location|}}}|;|2}}, {{#explode:{{lc:{{{locality_subjects|}}}|;|1}}]]
[[Category:{{#explode:{{{location|}}}|;|2}}, {{#explode:{{lc:{{{locality_subjects|}}}|;|2}}]]
[[Category:{{#explode:{{{location|}}}|;|2}}, {{#explode:{{lc:{{{locality_subjects|}}}|;|3}}]]
[[Category:{{#explode:{{{location|}}}|;|3}}, {{#explode:{{lc:{{{locality_subjects|}}}|;|0}}]]
[[Category:{{#explode:{{{location|}}}|;|3}}, {{#explode:{{lc:{{{locality_subjects|}}}|;|1}}]]
[[Category:{{#explode:{{{location|}}}|;|3}}, {{#explode:{{lc:{{{locality_subjects|}}}|;|2}}]]
[[Category:{{#explode:{{{location|}}}|;|3}}, {{#explode:{{lc:{{{locality_subjects|}}}|;|3}}]]

想问有没有更高效的实现方式?

高效实现方案

可以利用MediaWiki的ParserFunctions扩展提供的#arraymap函数,实现自动遍历两个参数的所有值并生成组合分类,代码如下:

{{#arraymap:{{{location|}}}|;|$loc|
  {{#arraymap:{{lc:{{{locality_subjects|}}}}}|;|$subj|
    [[Category:$loc, $subj]]
  }}
}}

代码说明

  • 外层#arraymap:将location参数按分号;拆分为数组,把每个元素赋值给变量$loc
  • 内层#arraymap:将转小写后的locality_subjects参数按分号拆分,把每个元素赋值给变量$subj
  • 内层自动生成[[Category:$loc, $subj]]格式的分类链接,最终输出所有值的组合

优势

  • 无需硬编码值的数量,自动适配任意数量的分号分隔值(只要参数格式正确)
  • 代码简洁易维护,避免冗余的重复代码
  • 保留了原实现中{{lc:...}}转小写的逻辑,和预期输出一致

注意:确保你的MediaWiki站点已安装并启用了ParserFunctions扩展(绝大多数维基站点默认已配置)

内容的提问来源于stack exchange,提问作者redheadkelly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 07:57:36