PHP 展开运算符怎么用?

文章导读
Previous Quiz Next PHP 将三个点符号 (...) 识别为 spread operator(展开运算符)。该运算符有时也被称为 splat operator(溅射运算符)。该运算符最早在 PHP 7.4 版本中引入。它可以在许多情况下有效使用,例如展开数
📋 目录
  1. 语法
  2. 使用展开运算符展开数组
  3. 多次使用展开运算符
  4. 展开运算符 vs array_merge()
  5. 结合展开运算符使用命名参数
  6. 使用展开运算符处理函数返回值
A A

PHP - 展开运算符



Previous
Quiz
Next

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

展开运算符提高了数组和函数参数的可读性。它是现代 PHP 开发中一个简单但实用的特性。

以下是我们将在本章介绍的概念列表及其示例 −

  • PHP 展开运算符的语法

  • 使用展开运算符展开数组

  • 多次使用展开运算符

  • 展开运算符 vs array_merge()

  • 结合展开运算符使用命名参数

  • 使用展开运算符处理函数返回值

语法

以下是 PHP 展开运算符的语法 −

// 展开数组
$newArray = [...$existingArray];

// 在函数中使用
function myFunction(...$args) {
   // 函数体
}

使用展开运算符展开数组

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

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

   print_r($arr2);
?>

输出

这将产生以下结果 −

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

多次使用展开运算符

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

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

   print_r($arr3);
?>

输出

这将生成以下结果 −

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

展开运算符 vs array_merge()

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

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

   print_r($arr3);
?>

输出

这将产生以下结果 −

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

然而,使用 (...) 运算符要高效得多,因为它避免了函数调用的开销。

结合展开运算符使用命名参数

PHP 8.1.0 还引入了另一个特性,允许在展开参数后使用命名参数。与逐个为每个参数提供值不同,数组中的值将被展开到对应的参数中,在数组前使用 ...(三个点)。

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

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

输出

这将导致以下结果 −

x = 10  y = 20  z = 30

使用展开运算符处理函数返回值

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

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

输出

此 PHP 代码的结果为 −

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