Tools 是非官方社区Wiki。社区文档正在编写中,欢迎参与。 Wiki编辑答疑群:717421103
版本250722.2
全站通知:

帮助:解析函数/arraymerge

来自WIKI实验室WIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索

Arraymerge是一个解析函数。帮助:解析函数页列出了所有解析函数的说明。

arraymerge

合并数组。出自扩展 Arrays BWIKI和各大Wiki平台广泛使用此扩展。<br>在遥远的未来,它可能与Mediawiki新的并行解析器不兼容,请参阅扩展主页了解更多信息。

语法

{{#arraymerge: 新数组名 | 数组1 | 数组2 | ... | 数组n }}
  • 新数组名:存放合并结果的目标数组名称
  • 数组1..n:要合并的已定义数组,至少两个

将多个数组按顺序合并为一个新数组,合并时:

  • 元素会按数组顺序依次追加;
  • 不会去重;
  • 数字键会按 PHP 规则重新编号,字符串键保留原名(后者会覆盖前者同名键)。

示例

先定义数组abc:

  • a: {{#arraydefine:a|orange}} 值为 orange
  • b: {{#arraydefine:b|red, red}} 值为 red、red
  • c: {{#arraydefine:c|blue, blue}} 值为 blue、blue

则:

  • {{#arraymerge: x | a | b }} → x = orange、red、red
  • {{#arraymerge: x | a | c }} → x = orange、blue、blue
  • {{#arraymerge: x | a | b | c }} → x = orange、red、red、blue、blue

底层代码

/** mediawiki-extensions-Arrays-REL1_37 ExtArrays.php
 * Merge values two arrayes identified by arrayid1 and arrayid2 into a new array identified by arrayid_new.
 * This merge differs from array_merge of php because it merges values.
 *
 * Usage:
 *    {{#arraymerge:arrayid_new |array1 |array2 |... |array n}}
 *    See: http://www.php.net/manual/en/function.array-merge.php
 */
public static function pfObj_arraymerge( &$parser, $frame, $args ) {
	self::get( $parser )->multiArrayOperation( $frame, $args, __FUNCTION__, false );
	return '';
}

private function multi_arraymerge( $array1, $array2 ) {
	// keys will not be re-organized
	return array_merge( $array1, $array2 );
}

代码逻辑简述

其中的multiArrayOperation,会从第一个数组(array_1)开始,对其他所有数组逐一执行 multi_arraymerge( array_1, array_i )。也就是,将第一个数组与其他数组逐一合并;
合并数组的核心函数是 PHP 的array_merge 函数。

实际用例

一些Wiki使用了相关特性,如下所示这个静态列表可能在下列页面更改后过时仅供批判性参考