A Função array_diff do PHP
A função array_diff no PHP compara arrays e retorna os valores presentes em um array mas não em outro.
A função array_diff no PHP é uma função nativa que compara arrays e retorna os valores presentes no primeiro array, mas não em nenhum dos outros. Ela é útil sempre que você precisar da diferença entre listas — por exemplo, comparar dados de um banco de dados com valores enviados por um formulário, ou descobrir quais itens foram removidos entre dois instantâneos de uma lista.
Este capítulo aborda como o array_diff funciona, sua sintaxe, como ele lida com chaves e comparação de valores, e armadilhas comuns. Faz parte do tópico arrays em PHP.
Como o array_diff Funciona
A função array_diff compara dois ou mais arrays e retorna um novo array contendo os valores presentes no primeiro array, mas em nenhum dos arrays subsequentes. Dois pontos são essenciais para entender:
- A comparação é baseada em valores; as chaves são ignoradas. Apenas os valores são comparados, mas as chaves do primeiro array são preservadas no resultado (elas não são reindexadas).
- Os valores são comparados como strings. Internamente, o PHP trata dois elementos como iguais quando
(string) $a === (string) $b. Portanto, o inteiro1e a string"1"são considerados o mesmo valor.
Sintaxe
A sintaxe da função array_diff é a seguinte:
Sintaxe da função array_diff do PHP
array array_diff (array $array1, array $array2 [, array $... ]);O parâmetro array1 é o primeiro array — aquele cujos valores você deseja manter. O parâmetro array2 (e quaisquer arrays adicionais) são os arrays com os quais comparar. A função retorna os valores de array1 que não são encontrados em nenhum dos outros arrays.
Exemplos
Veja alguns exemplos de como usar a função array_diff no seu código PHP.
Exemplo PHP de uso da função array_diff
Este código produzirá a seguinte saída:
Array ( [0] => 1 )Como você pode ver, a função array_diff retornou o valor 1, que está presente em $array1 mas não em $array2. Observe que a chave original (0) do primeiro array é preservada.
Exemplo PHP com valores string (sensibilidade a maiúsculas e minúsculas)
Este código produzirá a seguinte saída:
Array ( [1] => Banana )Neste exemplo, a comparação de strings diferencia maiúsculas de minúsculas. Como 'Banana' não corresponde exatamente a 'banana', ela é retornada como diferença. A chave 1 (posição original de Banana) é mantida no resultado.
Comparando com múltiplos arrays
Você pode passar mais de dois arrays. Um valor é mantido apenas se estiver ausente de todos os outros arrays:
<?php
$array1 = [1, 2, 3, 4, 5];
$array2 = [2, 4];
$array3 = [5];
$result = array_diff($array1, $array2, $array3);
print_r($result);
?>Saída:
Array ( [0] => 1 [2] => 3 )Os valores 2 e 4 são removidos por $array2, e 5 é removido por $array3, restando 1 e 3 com suas chaves originais.
Reindexando o resultado
Como as chaves originais são preservadas, o resultado pode ter lacunas nas chaves numéricas. Se você precisar de uma lista com índices sequenciais limpos, envolva a chamada em array_values():
<?php
$result = array_values(array_diff([1, 2, 3], [2]));
print_r($result);
?>Saída:
Array ( [0] => 1 [1] => 3 )Armadilha: comparação solta baseada em string
Como os elementos são comparados como strings, tipos mistos podem corresponder de forma inesperada:
<?php
$result = array_diff(['1', '2', 3], [1, 2]);
print_r($result);
?>Saída:
Array ( [2] => 3 )Aqui '1' corresponde a 1 e '2' corresponde a 2 (comparação de string), então apenas 3 permanece. Objetos e arrays como valores geram um aviso, pois não podem ser convertidos para string de forma limpa.
Funções relacionadas
array_diff compara apenas valores. O PHP oferece variantes para diferentes necessidades:
array_diff_key()— compara chaves em vez de valores.array_diff_assoc()— compara tanto chaves quanto valores.array_intersect()— o oposto: retorna valores presentes em todos os arrays.array_merge()— combina arrays em vez de subtraí-los.
Conclusão
A função array_diff é uma ferramenta útil para comparar arrays e encontrar as diferenças entre eles. Seja trabalhando com dados de um banco de dados ou simplesmente comparando listas de valores, a função array_diff pode ajudá-lo a encontrar de forma rápida e fácil os valores exclusivos de um array. Ao usar essa função no seu código PHP, você pode agilizar seu processo de desenvolvimento e facilitar a localização e o processamento dos dados necessários.