社区文档构建进行中,欢迎编辑。社区答疑群(非官方):717421103

全站通知:

帮助:解析函数/arrayslice

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

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

arrayslice

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

从数组的指定位置开始,提取指定长度的片段,存入新数组。

语法

{{#arrayslice:新数组名|数组名|偏移量|长度}}

  • 新数组名:存放结果
  • 数组名:操作目标
  • 偏移量:切片起始位置,可以是负数用于向后索引(最后一个元素是-1)
  • 长度:要提取的元素数量,默认为后续全部元素。

数组不存在时,返回空字符串

示例

有数组x为:{{#arraydefine:x|a,b,c,d,e,f,g}} → a、b、c、d、e、f、g

{{#arrayslice:y|x|0|2}} → a、b
{{#arrayslice:y|x|1|3}} → b、c、d
{{#arrayslice:y|x|-3|2}} → e、f
{{#arrayslice:y|x|2}} → c、d、e、f、g

底层代码

/** mediawiki-extensions-Arrays-REL1_37 ExtArrays.php
 * extract a slice from an array
 * usage:
 *     {{#arrayslice:arrayid_new|arrayid|offset|length}}
 *
 *    extract a slice from an  array
 *    see: http://www.php.net/manual/en/function.array-slice.php
 */
public static function pf_arrayslice( Parser &$parser, $arrayId_new, $arrayId = null, $offset = 0, $length = null ) {
	$store = self::get( $parser );
	if ( $arrayId === null ) {
		global $egArraysCompatibilityMode;
		if ( !$egArraysCompatibilityMode ) { // COMPATIBILITY-MODE
			$store->setArray( $arrayId_new );
		}
		return '';
	}
	// get target array before overwriting it in any way
	$array = $store->getArray( $arrayId );

	// make sure at least an empty array exists if we return early
	$store->setArray( $arrayId_new );

	if ( $array === null
		|| !is_numeric( $offset ) // don't ignore invalid offset
	) {
		return '';
	}

	if ( !is_numeric( $length ) ) {
		$length = null; // ignore invalid input, slice till end
	}

	// array_slice will re-organize keys
	$newArray = array_slice( $array, $offset, $length );
	$store->setArray( $arrayId_new, $newArray );

	return '';
}
代码逻辑:
  • 函数参数包括 $parser(解析器对象)、$arrayId_new(新数组ID)、$arrayId(目标数组ID,默认为 null)、$offset(偏移量,默认为 0)、$length(长度,默认为 null)。
  • 如果 $arrayId 为 null,返回空字符串(其中的$egArraysCompatibilityMode为False)。
  • 获取目标数组 $array,确保至少存在一个空数组。
  • 如果目标数组不存在或者 $offset 不是数字,则返回空字符串。
  • 如果 $length 不是数字,则将其设为 null,表示截取到数组末尾。
  • 从目标数组中提取指定偏移量和长度的片段(基于 PHP 的 array_slice 函数),并将结果存储到新数组中。

实际用例

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