Resumo : neste tutorial, você aprenderá sobre o operador spread do PHP e como usá-lo de forma eficaz, como mesclar vários arrays em um único.
Introdução ao operador spread PHP
O PHP 7.4 introduziu o operador spread na expressão de array . PHP usa os três pontos (...
) para denotar o operador spread.
Quando você prefixa um array com o operador spread, o PHP espalha os elementos do array no lugar:
...array_var
Linguagem de código: PHP ( php )
Por exemplo:
<?php
$numbers = [4,5];
$scores = [1,2,3, ...$numbers];
print_r($scores);
Linguagem de código: PHP ( php )
Saída:
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
)
Linguagem de código: PHP ( php )
Como funciona.
- Primeiro, defina o
$numbers
array que contém dois inteiros. - Em segundo lugar, defina a
$scores
matriz de três inteiros 1, 2 e 3. Além disso, espalhe os elementos da$numbers
matriz na$scores
matriz. Como resultado, a$score
matriz conterá cinco números 1, 2, 3, 4 e 5.
O operador spread oferece melhor desempenho do que a array_merge()
função porque é uma construção de linguagem, enquanto array_merge()
é uma chamada de função. Além disso, o PHP otimiza o desempenho de arrays constantes em tempo de compilação.
Ao contrário da descompactação de argumentos, você pode usar o operador spread em qualquer lugar. Por exemplo, você pode usar o operador spread no início do array:
<?php
$numbers = [1,2];
$scores = [...$numbers, 3, 4];
print_r($scores);
Linguagem de código: PHP ( php )
Saída:
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
)
Linguagem de código: PHP ( php )
Ou você pode usar o operador spread no meio de um array como este:
<?php
$numbers = [2,3];
$scores = [1, ...$numbers, 4];
print_r($scores);
Linguagem de código: PHP ( php )
Saída:
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
)
Linguagem de código: PHP ( php )
Usando o operador spread PHP várias vezes
PHP permite que você use o operador spread várias vezes. Por exemplo:
<?php
$even = [2, 4, 6];
$odd = [1, 2, 3];
$all = [...$odd, ...$even];
print_r($all);
Linguagem de código: PHP ( php )
Saída:
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 2
[4] => 4
[5] => 6
)
Linguagem de código: PHP ( php )
Como funciona.
- Primeiro, defina duas matrizes
$even
que$odd
contenham os números pares e ímpares. - Segundo, use o operador spread para espalhar elementos desses arrays em um novo array
$all
. A$all
matriz conterá os elementos de ambas as matrizes$even
e$odd
.
Usando o operador spread PHP com um valor de retorno de uma chamada de função
O exemplo a seguir usa o operador spread com o valor de retorno de uma função:
<?php
function get_random_numbers()
{
for ($i = 0; $i < 5; $i++) {
$random_numbers[] = rand(1, 100);
}
return $random_numbers;
}
$random_numbers = [...get_random_numbers()];
print_r($random_numbers);
Linguagem de código: PHP ( php )
Saída:
Array
(
[0] => 47
[1] => 78
[2] => 83
[3] => 13
[4] => 32
)
Linguagem de código: PHP ( php )
Como funciona.
- Primeiro, defina uma função
get_random_numbers()
que retorne um array de cinco inteiros aleatórios entre 1 e 100. - Em seguida, use o operador spread para distribuir os elementos do array retornado diretamente da chamada de função.
Observe que você provavelmente verá uma saída diferente por causa da rand()
função.
Usando o operador spread PHP com um gerador
No exemplo a seguir, primeiro definimos um gerador que retorna números pares entre 2 e 10. Em seguida, usamos o operador spread para distribuir o valor retornado do gerador em um array:
<?php
function even_number()
{
for($i =2; $i < 10; $i+=2){
yield $i;
}
}
$even = [...even_number()];
print_r($even);
Linguagem de código: PHP ( php )
Saída:
Array
(
[0] => 2
[1] => 4
[2] => 6
[3] => 8
)
Linguagem de código: PHP ( php )
Usando o operador spread PHP com um objeto Traversable
O PHP permite aplicar o operador spread não apenas a um array, mas também a qualquer objeto que implemente a Traversable
interface. Por exemplo:
<?php
class RGB implements IteratorAggregate
{
private $colors = ['red','green','blue'];
public function getIterator()
{
return new ArrayIterator($this->colors);
}
}
$rgb = new RGB();
$colors = [...$rgb];
print_r($colors);
Linguagem de código: PHP ( php )
Saída:
Array
(
[0] => red
[1] => green
[2] => blue
)
Linguagem de código: PHP ( php )
Operador de propagação e argumentos nomeados
O PHP 8 permite chamar uma função usando argumentos nomeados. Por exemplo:
<?php
function format_name(string $first, string $middle, string $last): string
{
return $middle ?
"$first $middle $last" :
"$first $last";
}
echo format_name(
first: 'John',
middle: 'V.',
last: 'Doe'
); // John V. Doe
Linguagem de código: HTML, XML ( xml )
Além disso, você pode passar os argumentos para a função format_name usando o operador spread:
<?php
function format_name(string $first, string $middle, string $last): string
{
return $middle ?
"$first $middle $last" :
"$first $last";
}
$names = [
'first' => 'John',
'middle' => 'V.',
'last' => 'Doe'
];
echo format_name(...$names); // John V. Doe
Linguagem de código: HTML, XML ( xml )
Neste caso, as chaves dos elementos do array correspondem aos nomes dos parâmetros da format_name()
função.
Resumo
- PHP usa os três pontos (
...
) para denotar o operador spread. - O operador spread espalha os elementos de um array (
...array_var
). - Use o operador spread com uma matriz ou objeto que implemente a
Traversable
interface. - Use o spread array PHP para mesclar dois ou mais arrays em um.