PHP - 展開運算子



PHP 將三個點符號 (...) 識別為展開運算子。展開運算子有時也稱為splat 運算子。此運算子首次引入 PHP 7.4 版本。它可以有效地用於許多情況,例如解包陣列。

示例 1

在下面的示例中,$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
)

示例 2

展開運算子可以在表示式中使用多次。例如,在以下程式碼中,透過擴充套件兩個陣列的元素來建立第三個陣列。

<?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
)

示例 3

請注意,可以使用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
)

但是,使用 (...) 運算子效率更高,因為它避免了函式呼叫的開銷。

示例 4

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

示例 5

在以下示例中,函式的返回值是一個數組。然後展開並解包陣列元素。

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

它將產生以下輸出 -

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