W3docs

Função PHP Array Diff - Um Guia Completo

Em PHP, a função array_diff_ukey é uma ferramenta poderosa para comparar arrays e retornar a diferença entre eles com base em uma comparação de chaves personalizada

Função PHP array_diff_ukey() - Um Guia Completo

Em PHP, a função array_diff_ukey() é uma ferramenta poderosa que pode ajudá-lo a comparar arrays e retornar a diferença entre eles com base em uma função de comparação de chaves personalizada. Neste artigo, veremos mais de perto como essa função funciona e como você pode usá-la em seus projetos PHP.

Assinatura e Parâmetros da Função

array_diff_ukey(array $array, array ...$arrays, callable $key_compare_func): array

Esta é a notação do manual do PHP para a função. Em tempo de execução, o último argumento que você passa é sempre o callback de comparação; todos os argumentos anteriores são tratados como arrays.

Parâmetros:

  • $array: O array base com o qual comparar.
  • $arrays: Um ou mais arrays para comparar com o array base.
  • $key_compare_func: Um callable que compara duas chaves e retorna um inteiro menor, igual ou maior que zero (o mesmo contrato que um comparador do usort).

Retorno: Um array contendo as entradas de $array cujas chaves não estão presentes em nenhum dos outros arrays. Os valores nunca são inspecionados — apenas as chaves.

Quando devo usá-la?

Na maioria das vezes, array_diff_key() é suficiente: ela remove entradas cujas chaves aparecem em outros arrays usando uma comparação de chaves simples no estilo ===. Use array_diff_ukey() apenas quando "essa chave é a mesma?" exige lógica personalizada — por exemplo, tratando chaves sem distinção de maiúsculas e minúsculas, comparando apenas o prefixo de uma chave ou normalizando strings numéricas antes de correspondê-las. Se você precisar comparar valores com um callback, veja array_udiff(); para comparar tanto chaves quanto valores, veja array_diff_uassoc().

Como Funciona a Função PHP array_diff_ukey()?

A função array_diff_ukey() recebe dois ou mais arrays como argumentos e compara suas entradas com base na função de comparação de chaves que você fornece. A função de comparação de chaves deve retornar um inteiro menor, igual ou maior que zero, dependendo do resultado da comparação.

Se o resultado da comparação for menor que zero, o primeiro argumento é considerado menor que o segundo. Se o resultado for maior que zero, o primeiro argumento é considerado maior que o segundo. Se o resultado for igual a zero, os dois argumentos são considerados iguais.

Usando a Função PHP array_diff_ukey()

Veja um exemplo de como você pode usar a função array_diff_ukey() em PHP:

Exemplo PHP de uso da função array_diff_ukey

<?php

function key_compare_func($a, $b)
{
    if ($a === $b) {
        return 0;
    }
    return ($a > $b)? 1:-1;
}

$array1 = ["a" => "green", "b" => "brown", "c" => "blue", "red"];
$array2 = ["a" => "green", "yellow", "red"];
$result = array_diff_ukey($array1, $array2, 'key_compare_func');
print_r($result);

?>

Neste exemplo, a função array_diff_ukey() é usada para comparar as entradas em $array1 e $array2 com base em uma função de comparação de chaves personalizada chamada key_compare_func. O array resultante, armazenado em $result, contém as entradas de $array1 que não estão presentes em $array2.

Observação: No callback, $a e $b representam as chaves dos arrays, não os valores.

Saída:

Array
(
    [b] => brown
    [c] => blue
)

Acompanhe o raciocínio: $array1 tem as chaves a, b, c e 0 (o "red" sem chave definida recebe a chave inteira 0). $array2 tem as chaves a, 0 e 1. As chaves a e 0 existem em ambos os arrays, portanto array_diff_ukey() remove "green" e "red" do resultado, deixando apenas as entradas cujas chaves (b, c) são únicas em $array1.

Função de Comparação de Chaves Personalizada

A função de comparação de chaves personalizada é uma parte essencial da função array_diff_ukey(), pois determina como as entradas nos dois arrays são comparadas. Veja um exemplo de uma função de comparação de chaves personalizada:

Exemplo PHP de função personalizada de comparação de chaves de array

function key_compare_func($a, $b)
{
    if ($a === $b) {
        return 0;
    }
    return ($a > $b)? 1:-1;
}

Neste exemplo, a função key_compare_func() retorna 0 se os dois argumentos forem iguais, 1 se o primeiro argumento for maior que o segundo e -1 se o primeiro argumento for menor que o segundo.

Observação sobre Type Juggling: Ao comparar chaves de tipos mistos (por exemplo, strings e inteiros), a comparação flexível do PHP no seu callback pode levar a resultados inesperados. Certifique-se de que seu callback lide explicitamente com conversão de tipos ou use comparação estrita (===) se a correspondência precisa de tipos for necessária.

Um caso prático: comparando chaves sem distinção de maiúsculas e minúsculas

O exemplo acima se comporta exatamente como o mais simples array_diff_key(). O callback personalizado só demonstra seu valor quando a comparação em si é não trivial — por exemplo, correspondendo chaves independentemente de letras maiúsculas ou minúsculas:

php— editable, runs on the server

Mesmo que "Host" e "PORT" difiram em maiúsculas e minúsculas de "host" e "port", strcasecmp os trata como chaves iguais, portanto são removidos. Apenas Debug, que não tem correspondente em $defaults, sobrevive:

Array
(
    [Debug] => 1
)

Um simples array_diff_key() aqui teria mantido todas as três entradas, pois "Host" !== "host". Essa diferença é precisamente quando array_diff_ukey() é a ferramenta certa.

Conclusão

A função array_diff_ukey() compara arrays pelas suas chaves usando um callback que você fornece, retornando as entradas do primeiro array cujas chaves estão ausentes nos demais. Use-a quando a igualdade de chaves precisa de lógica personalizada; recorra ao mais simples array_diff_key() quando uma comparação estrita de chaves for suficiente.

Funções relacionadas que vale conhecer:

Prática

Prática
Qual é o uso correto da função array_diff_ukey() em PHP?
Qual é o uso correto da função array_diff_ukey() em PHP?
Was this page helpful?