Php 简明教程

PHP - Spread Operator

PHP 将三个点符号(…​)识别为 spread operator 。展开运算符有时也称为 splat operator 。此运算符最初在 PHP 7.4 版本中引入。它可以在许多情况下有效使用,例如解包数组。

PHP recognizes the three dots symbol (…​) as the spread operator. The spread operator is also sometimes called the splat operator. This operator was first introduced in PHP version 7.4. It can be effectively used in many cases such as unpacking arrays.

Example 1

在下面的示例中,$arr1 中的元素插入到 $arr2 中其自身元素的列表之后。

In the example below, the elements in $arr1 are inserted in $arr2 after a list of its own elements.

<?php
   $arr1 = [4,5];
   $arr2 = [1,2,3, ...$arr1];

   print_r($arr2);
?>

它将生成以下 output

It will produce the following output

Array
(
   [0] => 1
   [1] => 2
   [2] => 3
   [3] => 4
   [4] => 5
)

Example 2

展开运算符可以在表达式中多次使用。例如,在以下代码中,通过扩展两个数组中的元素来创建一个第三个数组。

The Spread operator can be used more than once in an expression. For example, in the following code, a third array is created by expanding the elements of two arrays.

<?php
   $arr1 = [1,2,3];
   $arr2 = [4,5,6];
   $arr3 = [...$arr1, ...$arr2];

   print_r($arr3);
?>

它将生成以下 output

It will produce the following output

Array
(
   [0] => 1
   [1] => 2
   [2] => 3
   [3] => 4
   [4] => 5
   [5] => 6
)

Example 3

请注意,可以使用 array_merge() 函数获得相同的结果,如下所示:

Note that the same result can be obtained with the use of array_merge() function, as shown below −

<?php
   $arr1 = [1,2,3];
   $arr2 = [4,5,6];
   $arr3 = array_merge($arr1, $arr2);

   print_r($arr3);
?>

它将产生相同的 output ——

It will produce the same output

Array
(
   [0] => 1
   [1] => 2
   [2] => 3
   [3] => 4
   [4] => 5
   [5] => 6
)

但是,使用(…​)运算符的效率要高得多,因为它避免了函数调用的开销。

However, the use of (…​) operator is much more efficient as it avoids the overhead a function call.

Example 4

PHP 8.1.0 还引入了另一项功能,允许在解包参数后使用命名参数。不必为每个参数分别提供值,而是将数组中的值解包到相应的参数中,在数组前使用 …​(三个点)。

PHP 8.1.0 also introduced another feature that allows using named arguments after unpacking the arguments. Instead of providing a value to each of the arguments individually, the values from an array will be unpacked into the corresponding arguments, using …​ (three dots) before the array.

<?php
   function  myfunction($x, $y, $z=30) {
      echo "x = $x  y = $y  z = $z";
   }

   myfunction(...[10, 20], z:30);
?>

它将生成以下 output

It will produce the following output

x = 10  y = 20  z = 30

Example 5

在以下示例中,函数的返回值是一个数组。然后数组元素被展开和解包。

In the following example, the return value of a function is an array. The array elements are then spread and unpacked.

<?php
   function get_squares() {
      for ($i = 0; $i < 5; $i++) {
         $arr[] = $i**2;
      }
      return $arr;
   }
   $squares = [...get_squares()];
   print_r($squares);
?>

它将生成以下 output

It will produce the following output

Array
(
   [0] => 0
   [1] => 1
   [2] => 4
   [3] => 9
   [4] => 16
)