在 PHP 7.4 中实现了数组RFC中的扩展运算符:
$ary = [3, 4, 5];
return [1, 2, ...$ary]; // same as [1, 2, 3, 4, 5]
注意:未打包的数组/可遍历对象只能具有整数键。对于字符串键,仍需使用array_merge()
。
更新:数组表达式中的扩展运算符
来源: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]
<---------------更新结束-------------------->
首先,你在错误地引用具有数组的可变参数函数。
你可以创建自己的方法来完成这个任务,或者像 @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这样的东西。即使一种语言实现了这个功能,在幕后该语言也会使用merge函数,其中包含将两个数组的所有元素复制到单个数组中的代码。
我写下这个答案只是因为你要求一种做法,并且优雅是你的要求。
更合理的例子:
<?php $a = [1,2,3,56,564]; $result = merge($a, 332, 232, 5434, 65); var_dump($result); ?>
array_merge(...[[2 => 'foo', 3 => 'bar'], [2 => 'foo', 3 => 'baz']])
我正在寻找类似于+(加号)运算符的东西来处理这种情况。 - FacedownPHP 7.4以下版本
$mainArray = ['element1', 'element2'];
$finalArray = array_merge($mainArray, ['element3']);
print_r($finalArray);
// Final array would be ['element1', 'element2', 'element3'];
在 PHP 7.4 及以上版本中
$mainArray = ['element1', 'element2'];
$finalArray = [...$mainArray, 'element3'];
print_r($finalArray);
// Final array would be ['element1', 'element2', 'element3'];
在PHP 7.4中,您现在可以在数组表达式中使用扩展运算符。
$parts = ['apple', 'pear'];
$fruits = ['banana', 'orange', ...$parts, 'watermelon'];
// ['banana', 'orange', 'apple', 'pear', 'watermelon'];
$b = array_merge($a, [3, 4]);
。 - Mark Baker