PHP reconoce el símbolo de los tres puntos (…) como el operador de propagación. El operador spread también se denomina a veces operador splat. Este operador se introdujo por primera vez en la versión 7.4 de PHP. Se puede utilizar eficazmente en muchos casos, como desempaquetar matrices.

Ejemplo 1

En el siguiente ejemplo, los elementos de $arr 1 se insertan en $arr 2 después de una lista de sus propios elementos.

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

   print_r($arr2);
?>

Producirá el siguiente resultado:

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

Ejemplo 2

El operador Spread se puede utilizar más de una vez en una expresión. Por ejemplo, en el código siguiente, se crea una tercera matriz expandiendo los elementos de dos matrices.

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

   print_r($arr3);
?>

Producirá el siguiente resultado:

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

Ejemplo 3

Tenga en cuenta que se puede obtener el mismo resultado con el uso de la función array_merge(), como se muestra a continuación:

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

   print_r($arr3);
?>

Producirá el mismo resultado:

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

Sin embargo, el uso del operador (…) es mucho más eficiente, ya que evita la sobrecarga de una llamada de función.

Ejemplo 4

PHP 8.1.0 también introdujo otra característica que permite usar argumentos con nombre después de desempaquetar los argumentos. En lugar de proporcionar un valor a cada uno de los argumentos individualmente, los valores de una matriz se desempaquetarán en los argumentos correspondientes, usando … (tres puntos) antes de la matriz.

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

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

Producirá el siguiente resultado:

x = 10  y = 20  z = 30

Ejemplo 5

En el ejemplo siguiente, el valor devuelto de una función es una matriz. A continuación, los elementos de la matriz se distribuyen y se desempaquetan.

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

Producirá el siguiente resultado:

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