Neste tutorial mostraremos como fazer a comparação entre 2 ou mais arrays em PHP, retornando um novo array com os valores diferentes entre eles. Para isso,  utilizaremos a função array_diff() que compara a diferença entre arrays, considerando apenas os valores de seus elementos, a função array_diff_assoc() que compara a diferença considerando também os seus índices (chaves) e a função array_diff_key() que computa a diferença usando apenas os índices (chaves) na comparação.

 Veja também os artigos Como declarar, atribuir e acessar elementos de um Array em PHP e Como eliminar elementos vazios ou nulos de um array em PHP .

1. Usando a função  array_diff()

1.1. A função array_diff() compara os valores entre dois (ou mais) arrays, e retorna um novo array com a(s) diferença(s). Chaves do array são preservadas. 

1.1.1. Esta função compara os valores entre arrays e retorna um array que contém as entradas de array1 mas que não estão presentes em array2 ou array3, etc.

Sintaxe:

array_diff(array1, array2, array3, ...)

Parâmetros:

array1 = Este é o primeiro array que será comparado com outros arrays passados ​​para a função.. Valor obrigatório.

array2 = Este é um array para ser comparado com o primeiro array. Valor obrigatório.

array3 = Este é a segundo array a ser comparado com o primeiro array. Valor opcional.

Obs.: Poderá ser passados quantos arrays você desejar. Eles serão comparados com o primeiro array de entrada.

1.2. No exemplo abaixo, vamos comparar 2 arrays com nomes de países como valores. Observe que nesse exemplo usamos apenas índices (chaves) numéricos para definir os elementos dos arrays.

<?php 
 $array1 = array('Brasil', 'Espanha', 'Argentina', 'Estados Unidos');
 $array2 = array('Estados Unidos', 'Espanha', 'Argentina', 'França');
 
 $dif1 = array_diff($array1, $array2); // valores que tem em array1 e não tem em array2
 print_r($dif1);                       // retorna Array ( [0] => Brasil )
 
 $dif2 = array_diff($array2, $array1); // valores que tem em array2 e não tem em array1
 print_r($dif2);                       // retorna Array ( [3] => França )

laughing Para testar os exemplo mostrado acima, acesse: Squids Editor PHP. Clique no botão [Run].

1.3. No exemplo abaixo, vamos comparar 2 arrays com nomes cores em inglês como valores de seus elementos. Observe que neste exemplo usaremos arrays associativos, onde alguns índices (chaves) são definidos manualmente.

1.3.1. É importante salientar que a função array_diff() compara apenas valores e não índices.

<?php 
 $array1 = array("a" => "green", "red", "b" => "blue", "red");
 $array2 = array("b" => "green", "yellow", "a" => "red");
 
 $dif1 = array_diff($array1, $array2); // valores que tem em array1 e não tem em array2
 print_r($dif1);                       // retorna Array ( [b] => blue )
 
 $dif2 = array_diff($array2, $array1); // valores que tem em array2 e não tem em array1
 print_r($dif2);                       // retorna Array ( [0] => yellow )

laughing Para testar os exemplo mostrado acima, acesse: Squids Editor PHP. Clique no botão [Run].

2. Usando a função array_diff_assoc()

2.1. A função array_diff_assoc() compara os índices (chaves) e os valores entre dois (ou mais) arrays, e retorna um novo array com a(s) diferença(s).

2.1.1. Esta função compara os índices (chaves) e valores entre dois (ou mais) arrays, e retorna um array que contém as entradas do array1 que não estão presentes no array2 ou array3, etc.

Sintaxe:

array_diff_assoc(array1,array2,array3...)

Parâmetros:

array1 = Este é o primeiro array que será comparado com outros arrays passados ​​para a função. Valor obrigatório.

array2 = Este é um array para ser comparado com o primeiro array. Valor obrigatório.

array3 = Este é a segundo array a ser comparado com o primeiro array. Valor opcional.

Obs.: Poderá ser passados quantos arrays você desejar. Eles serão comparados com o primeiro array de entrada.

2.2. No exemplo abaixo, vamos comparar 2 arrays com nomes cores em inglês como valores de seus elementos. Observe que neste exemplo vamos comparar tanto os valores como os índices dos arrays para gerarmos um novo array com as diferenças entre eles.

<?php 
 $array1 = array("a" => "green", "red", "b" => "blue", "red", "c" => 'yellow');
 $array2 = array("b" => "green", "c" => "yellow", "a" => "blue", "red");
 
 $dif1 = array_diff($array1, $array2); // valores que tem em array1 e não tem em array2
 print_r($dif1);                       // retorna Array ( [a] => green [b] => blue [1] => red )

 $dif2 = array_diff($array2, $array1); // valores que tem em array2 e não tem em array1
 print_r($dif2);                       // retorna Array ( [b] => green [a] => blue ) 
           

laughing Para testar os exemplo mostrado acima, acesse: Squids Editor PHP. Clique no botão [Run].

3. Usando a função array_diff_key()

3.1. A função array_diff_key() compara os índices (chaves) entre dois (ou mais) arrays, e retorna um novo array com a(s) diferença(s).

3.1.1. Esta função compara os índices (chaves) entre dois (ou mais) arrays, e retorna um array que contém as entradas do array1 que não estão presentes no array2 ou array3, etc.

Sintaxe:

array_diff_assoc(array1,array2,array3...)

Parâmetros:

array1 = Este é o primeiro array que será comparado com outros arrays passados ​​para a função. Valor obrigatório.

array2 = Este é um array para ser comparado com o primeiro array. Valor obrigatório.

array3 = Este é a segundo array a ser comparado com o primeiro array. Valor opcional.

Obs.: Poderá ser passados quantos arrays você desejar. Eles serão comparados com o primeiro array de entrada.

3.2. Observe que neste exemplo utilizamos apenas os índices dos arrays para a comparação entre dois arrays e gerarmos um novo array com as diferenças entre eles.

<?php 
   $array1 = array("a" => "green", "red", "b" => "blue", "red", 'yellow');
   $array2 = array("b" => "green", "c" => "yellow", "a" => "blue", "red",);
 
 $dif1 = array_diff($array1, $array2); // valores que tem em array1 e não tem em array2
 print_r($dif1);                       // retorna Array ( [1] => red [b] => blue [2] => yellow )

 $dif2 = array_diff($array2, $array1); // valores que tem em array2 e não tem em array1
 print_r($dif2);                       // retorna Array ( [c] => yellow ) 
           

laughing Para testar os exemplo mostrado acima, acesse: Squids Editor PHP. Clique no botão [Run].

Documentação Oficial

1. [Documentação PHP - array_diff()] » Sobre a função da array_diff(): compara valores entre 2 ou mais arrays e retorna novo array com as diferenças.

2. [Documentação PHP - array_diff_assoc() » Sobre a função da array_diff_assoc(): compara valores e índices entre 2 ou mais arrays e retorna novo array com as diferenças.

3. [Documentação PHP - array_diff_key() » Sobre a função da array_diff_key(): compara apenas índices entre 2 ou mais arrays e retorna novo array com as diferenças.

Cursos

 Aprenda a ser um programador mais do que completo (Pacote Full Stack)

Compartilhe:

Área do Usuário

Doações

Por favor, ajude o nosso site a se manter online :)

 Obrigado!
Angelo Luis Ferreira
angelo.alf@gmail.com

Produzido por:

Topo