Irei falar sobre a função array_merge() e o operador spread usados em arrays no PHP. Veja esses dois Posts onde falo sobre arrays: PHP – Aula 020: Arrays e PHP – Aula 021: Arrays Multidimensionais
O operador spread foi introduzido na versão 7.4 do PHP. Esse operador é representado por três pontos (…).
A palavra inglesa Spread tem significado de espalhar em português.
A função array_merge() tem a praticamente a mesma função que o operador spread, mas o operador spread oferece melhor desempenho; isso porque o operador spread é uma construção de linguagem enquanto o array_merge() é uma chamada de função.
Vamos ver um pouco dos dois assuntos.
array_merge()
Podemos juntar arrays e formar apenas um. Logicamente que o retorno será um outro array.
A função array_merge() anexa os elementos do próximo array ao último elemento do anterior.
a função array_merge() não substituir os valores com os mesmo índice. Em vez disso, ele renumera começando do zero no novo array.
A partir do PHP 7.4.0, podemos chamar a função array_merge() sem nenhum argumento. Nesse caso, a função retornará um array vazio.
A sintaxe é a seguinte:
array_merge($array1, $array2);
EXEMPLO DE USO DO ARRAY_MERGE()
Vamos aos exemplos.
<?php
$nomes = [
'Maria',
'Silva',
null
];
$nomes2 = [
'Silvia',
'Loiola',
'silvia@email'
];
$resultado = array_merge($nomes, $nomes2);
echo "<pre>";
print_r($resultado);
echo "</pre>";
?>
Resultado:
Array
(
[0] => Maria
[1] => Silva
[2] =>
[3] => Silvia
[4] => Loiola
[5] => silvia@email
)
EXEMPLO DE USO DO ARRAY_MERGE() USANDO ARRAY ASSOCIATIVO
Vamos usar arrays com strings no lugar dos números do índice
<?php
$nomes = [
'nome' => 'Maria',
'sobrenome' =>'Silva',
'email' => null
];
$nomes2 = [
'nome' => 'Silvia',
'sobrenome' => 'Loiola',
'email' => 'silvia@email'
];
$resultado = array_merge($nomes, $nomes2);
echo "<pre>";
print_r($resultado);
echo "</pre>";
?>
Resultado:
Array
(
[nome] => Silvia
[sobrenome] => Loiola
[email] => silvia@email
)
Veja que não foi mantido os valores do primeiro array, isso porque os índices são os mesmos nos dois arrays.
Operador Spread
Vamos a exemplos de uso do operador spread.
<?php
$nomes = [
'Maria',
'Silva',
null
];
$nomes2 = [
'Silvia',
'Loiola',
'silvia@email',
...$nomes
];
echo "<pre>";
print_r($nomes2);
echo "</pre>";
?>
Perceba acima o array $nome sendo inserido como …$nome.
Resultado:
Array
(
[0] => Silvia
[1] => Loiola
[2] => silvia@email
[3] => Maria
[4] => Silva
[5] =>
)
Podemos usar o operador de spread em qualquer lugar. Por exemplo, podemos usá-lo no início do array:
<?php
$nomes = [
'Maria',
'Silva',
null
];
$nomes2 = [
...$nomes,
'Silvia',
'Loiola',
'silvia@email'
];
?>
ou ainda
<?php
$nomes = [
'Maria',
'Silva',
null
];
$nomes2 = [
'Silvia',
...$nomes,
'Loiola',
'silvia@email'
];
?>
OUTRO EXEMPLO COM 2 ARRAYS
<?php
$nomes = [
'Maria',
'Silva',
null
];
$nomes2 = [
'Silvia',
'Loiola',
'silvia@email'
];
$tudo = [
...$nomes,
...$nomes2
];
echo "<pre>";
print_r($tudo);
echo "</pre>";
?>
Array
(
[0] => Maria
[1] => Silva
[2] =>
[3] => Silvia
[4] => Loiola
[5] => silvia@email
)
USANDO O OPERADOR SPREAD EM UMA FUNÇÃO COM RAND()
Abaixo criamos uma função, conforme vimos em artigos anteriores. A função rand() pertencente ao próprio PHP. A função rand() ainda não foi usada nesse site, mas ela serve para gerar números aleatoriamente. Posso usá-la em diversas partes da minha página, como em laço de repetição for e a condicional if.
O exemplo abaixo é um pouco mais complexo
<?php
function get_numeros_aleatorios() {
for ($i=0 ; $i < 5 ; $i++) {
$aleatorios[] = rand(1, 20);
}
return $aleatorios;
}
$numeros_aleatorios = [...get_numeros_aleatorios()];
print_r($numeros_aleatorios);
?>
Toda vez que atualizamos a página, navegador, os números abaixo irão mudar. Veja o resultado onde atualizei a página 3 vezes:
Array ( [0] => 8 [1] => 13 [2] => 12 [3] => 6 [4] => 5 )
Array ( [0] => 8 [1] => 15 [2] => 17 [3] => 12 [4] => 7 )
Array ( [0] => 3 [1] => 6 [2] => 19 [3] => 16 [4] => 16 )
Se não quiser usar o for poderá digitar o código acima da seguinte forma:
<?php
function get_numeros_aleatorios() {
$aleatorios[] = rand(1, 20);
$aleatorios[] = rand(1, 20);
$aleatorios[] = rand(1, 20);
$aleatorios[] = rand(1, 20);
$aleatorios[] = rand(1, 20);
return $aleatorios;
}
$numeros_aleatorios = [...get_numeros_aleatorios()];
print_r($numeros_aleatorios);
?>
USANDO O OPERADOR SPREAD EM UMA FUNÇÃO COM NÚMEROS PARES
Para o exemplo abaixo usamos o gerador yield. Por enquanto basta sabermos que yield se parece com return, mas ele não pára a função; o yield fornece um valor para o código de loop.
<?php
function numero_par() {
for ($i=2 ; $i < 10 ; $i+=2) {
yield $i;
}
}
$par = [...numero_par()];
print_r($par);
?>
Array ( [0] => 2 [1] => 4 [2] => 6 [3] => 8 )
USANDO O OPERADOR SPREAD EM UMA FUNÇÃO COM ARGUMENTOS NOMEADOS
PHP 8 permite que você chame uma função usando argumentos nomeados.
No exemplo abaixo usamos um operador ternário para tomada de decisão.
lembrando que o código abaixo funciona apenas no php 8.0 acima.
<?php
function formato_nomes(string $primeiro, string $meio, string $ultimo) {
return $meio? "$primeiro $meio $ultimo" : "$primeiro $ultimo";
}
echo formato_nome(
primeiro: 'Maria',
meio: 'Silva',
ultimo: 'Sauro'
);
?>
Além disso, você pode passar os argumentos para a função formato_nome usando o operador spread:
<?php
function formato_nomes(string $primeiro, string $meio, string $ultimo):string
{
return $meio? "$primeiro $meio $ultimo" : "$primeiro $ultimo";
}
$nomes = [
'primeiro' => 'Maria',
'meio' =>'Silva',
'ultimo' => 'Sauro'
];
echo formato_nome(...$nomes);
?>