更新:数组表达式中的扩展运算符
来源:https://wiki.php.net/rfc/spread_operator_for_array
Version: 0.2
Date: 2018-10-13
Author: CHU Zhaowei, jhdxr@php.net
Status: Implemented (in PHP 7.4)
以… 为前缀的数组对将在数组定义期间扩展。 只有实现 Traversable 的数组和对象才能展开。
例如:
$parts = ['apple', 'pear'];
$fruits = ['banana', 'orange', ...$parts, 'watermelon'];
// ['banana', 'orange', 'apple', 'pear', 'watermelon'];
可以进行多次扩展,并且与参数解包不同,……可以在任何地方使用。可以在展开运算符之前或之后添加普通元素。
扩展运算符适用于数组语法(array())和短语法([])。
也可以立即解包函数返回的数组。
$arr1 = [1, 2, 3];
$arr2 = [...$arr1]; //[1, 2, 3]
$arr3 = [0, ...$arr1]; //[0, 1, 2, 3]
$arr4 = array(...$arr1, ...$arr2, 111); //[1, 2, 3, 1, 2, 3, 111]
$arr5 = [...$arr1, ...$arr1]; //[1, 2, 3, 1, 2, 3]
function getArr() {
return ['a', 'b'];
}
$arr6 = [...getArr(), 'c']; //['a', 'b', 'c']
$arr7 = [...new ArrayIterator(['a', 'b', 'c'])]; //['a', 'b', 'c']
function arrGen() {
for($i = 11; $i < 15; $i++) {
yield $i;
}
}
$arr8 = [...arrGen()]; //[11, 12, 13, 14]
首先,您在错误意义上使用数组引用 Variadic 函数。
您可以创建自己的方法来执行此操作,或者您可以更好地使用@Mark Baker 在您的问题下的评论中建议的array_merge。
如果你仍然想使用扩展运算符/...,你可以自己实现这样的东西。
<?php
function merge($a, ...$b) {
return array_merge($a,$b);
}
$a = [1, 2];
$b = [3,4];
print_r( merge($a, ...$b));
?>
但对我来说,这样做是愚蠢的。因为你仍然必须使用像 array_merge 这样的东西。即使一种语言实现了这一点,该语言在幕后也在使用合并函数,该函数包含将两个数组的所有元素复制到一个数组中的代码。
我写这个答案只是因为你问这样做的方式,优雅是你的要求。
更合理的例子:
<?php
$a = [1,2,3,56,564];
$result = merge($a, 332, 232, 5434, 65);
var_dump($result);
?>