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

帮助:解析函数/arrayreset

来自WIKI实验室WIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索
arrayreset 悬浮框🟢稳定可用
删除已定义的数组变量
{{#arrayreset: 数组1 | 数组2 | ... }}
扩展:Arrays
数组
相关函数
相关资源

arrayreset

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

比如删除通过 {{#arraydefine:myArray|...}} 创建的数组,或清空所有数组以重新开始处理。

通常用于复杂模板的数据流控制,避免数组命名冲突,或在处理完数据后清理临时变量,保持页面解析环境整洁。

语法

{{#arrayreset: 数组名1 | 数组名2 | ... | 数组名n }}

或删除所有数组:

{{#arrayreset:}}

参数

数组名
要删除的数组变量名(区分大小写)
  • 可指定一个或多个数组名,用竖线分隔
  • 若不提供任何参数(空参数),则删除所有已定义的数组

效果

  • 输出:不输出任何字符(返回空字符串)
  • 效果:永久删除指定的数组变量,删除后该数组名可被重新定义使用

示例

先定义数组a, b, c:

{{#arraydefine:a|orange, red}}
{{#arraydefine:b|111, 22222}}
{{#arraydefine:c}}

他们的Size为:a:2、b:2、c:0和不存在的d:


现在删除a:{{#arrayreset:a}}


再次查看Size:a:、b:2、c :0和不存在的d:

可以看到:

  • 空数组 c 的 size 为 0
  • 被删除 a 与不存在数组 d 的 size 均为空


底层代码

/** mediawiki-extensions-Arrays-REL1_37 ExtArrays.php
 * reset some or all defined arrayes
 * usage:
 *    {{#arrayreset:}}
 *    {{#arrayreset:arrayid1,arrayid2,...arrayidn}}
 */
public static function pfObj_arrayreset( Parser &$parser, PPFrame $frame, $args ) {
	global $egArraysCompatibilityMode;

	if ( $egArraysCompatibilityMode && count( $args ) == 1 ) {
		/*
			* COMPATIBILITY-MODE: before arrays were separated by ';' which is an bad idea since
			* the ',' is an allowed character in array names!
			*/
		$args = preg_split( '/\s*,\s*/', trim( $frame->expand( $args[0] ) ) );
	}

	$store = self::get( $parser );

	// reset all hash tables if no specific tables are given:
	if ( !isset( $args[0] ) || ( $args[0] === '' && count( $args ) == 1 ) ) {
		// reset ALL arrays!
		$store->mArrays = [];
	} else {
		// reset specific hash tables:
		foreach ( $args as $arg ) {
			$arrayId = trim( $frame->expand( $arg ) );
			$store->unsetArray( $arrayId );
		}
	}
	return '';
}
/** mediawiki-extensions-Arrays-REL1_37 ExtArrays.php
 * Removes an existing array. If array didn't exist this will return false, otherwise true.
 *
 * @since 2.0
 *
 * @param string $arrayId
 *
 * @return bool whether the array existed and has been removed
 */
public function unsetArray( $arrayId ) {
	$arrayId = trim( $arrayId );
	if ( $this->arrayExists( $arrayId ) ) {
		unset( $this->mArrays[ $arrayId ] );
		return true;
	}
	return false;
}

处理流程

  1. 参数判断:检查是否提供参数
  2. 全部删除:若无参数或参数为空,清空所有数组($store->mArrays = []
  3. 逐一删除:若有参数,遍历每个数组名,调用 unsetArray() 方法删除
  4. 返回空字符串:函数始终返回空字符串,不产生可见输出

实际用例

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