Comparando Arrays E Trazendo Os Valores Diferentes

Categorias: desenvolvimento, php

Salve pessoal.

Ontem precisei comparar os resultados de dois arrays e deles trazer os valores que estavam em apenas um dos arrays.

A princípio procurei uma função que fizesse isso pra mim, achei que o array_diff fizesse isso para a gente. Mas me enganei! Não achei uma função com esse resultado.

A função array_diff na verdade traz apenas os valores que constam no primeiro array, mas não constam no segundo.
Exemplo:

<?php

$array1 = array("bola", "quadrado", "triangulo");
$array2 = array("esfera", "quadrado", "triangulo");

$result = array_diff($array1, $array2);
print_r($result);

?>

O resultado do código acima nos retorna um array com o valor “bola”.
Pois é o único valor que consta no primeiro array e não no segundo.

O que eu precisava é que ele me retornasse também os valores que tinham no segundo array e que não constavam no primeiro.

Resolvi da seguinte forma:

<?php

$array1 = array("bola", "quadrado", "triangulo");
$array2 = array("esfera", "quadrado", "triangulo");

$result1 = array_diff($array1, $array2);
$result2 = array_diff($array2, $array1);

$full = array_merge($result1, $result2);

print_r($full);

?>

Primeiro fazemos retornar os valores que estão no primeiro array e não no segundo ($result1).
Em seguida os que estão no segundo array e não no primeiro ($result2).
Após isso unimos os dois arrays através da função array_merge.

E o resultado retornado é [0] => bola [1] => esfera, como esperado.
Bola que está apenas no primeiro array, e esfera que está apenas no segundo.
Os demais valores aparecem em ambos os arrays, logo, ficam de fora.

Adicionem outros elementos aos arrays para testar e confiram os resultados.

Grande Abraço.


Comments