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
)