帮助:解析函数/arrayreset
Arrayreset是一个解析函数。帮助:解析函数页列出了所有解析函数的说明。
arrayreset
删除数组。出自扩展 Arrays BWIKI和各大Wiki平台广泛使用此扩展。<br>在遥远的未来,它可能与Mediawiki新的并行解析器不兼容,请参阅扩展主页了解更多信息。。
用于删除由Arrays扩展定义的数组。
语法
{{#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;
}
代码逻辑:
- 其中 $egArraysCompatibilityMode 为 False,仅在老版本(1.4 alpha前)支持在参数1中用逗号分割多个数组名
- 如无参数,清空所有数组(
$store->mArrays = [];
) - 否则,逐一移除指定数组(
$store->unsetArray( $arrayId )
)
实际用例
- 一些Wiki使用了相关特性,如下所示这个静态列表可能在下列页面更改后过时,仅供批判性参考。
- 模板:ReAudio - 坎特伯雷公主与骑士唤醒冠军之剑的奇幻冒险
- 模板:模板代码框 - 克鲁赛德战记