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

帮助:解析函数/arrayintersect

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

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

arrayintersect

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

从“第一个数组”中过滤,仅保留那些在所有后续数组中都至少出现一次的元素;结果的顺序与重复次数完全沿用第一个数组,与其他数组无关。

语法

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

至少需要两个数组参数。函数不直接输出,结果会写入 新数组名,需配合 #arrayprint 按需输出。

数组项比较时,行为基于 PHP 函数array_intersect:按字符串值比较,区分大小写(例如 redRed 不同)。

示例

有数组a: {{#arraydefine:a|orange, orange, red, blue}}
有数组b: {{#arraydefine:b|red, red, red, red, orange, yellow, yellow}}
有数组c: {{#arraydefine:c|blue, red}}


a ∩ b : {{#arrayintersect:x|a|b}}{{#arrayprint:x}}orange、orange、red
b ∩ a :{{#arrayintersect:y|b|a}}{{#arrayprint:y}}red、red、red、red、orange
a ∩ b ∩ c : {{#arrayintersect:z|a|b|c}}{{#arrayprint:z}}red

底层代码

/** mediawiki-extensions-Arrays-REL1_37 ExtArrays.php
 * Usage:
 *    {{#arrayintersect:arrayid_new |array1 |array2 |... |array n}}
 *
 *    Set operation, {red} = {red, white} intersect {red,black}
 *    See: http://www.php.net/manual/en/function.array-intersect.php
 */
public static function pfObj_arrayintersect( &$parser, $frame, $args ) {
	self::get( $parser )->multiArrayOperation( $frame, $args, __FUNCTION__, false );
	return '';
}

private function multi_arrayintersect( $array1, $array2 ) {
	// keys will be preserved!
	return array_intersect( $array1, $array2 );
}
实际效果等价于:从第一个数组开始,依次与后续数组做交集过滤;键与顺序保留自第一个数组。
求交集的核心函数是 PHP 的array_intersect 函数。其比较两个元素是否相同的标准是:(string) $elem1 === (string) $elem2 ,即对PHP语言的字符串转换表达相同。
实际用例
一些Wiki使用了相关特性,如下所示这个静态列表可能在下列页面更改后过时仅供批判性参考