W3docs

Entendendo a Função array_intersect_uassoc() do PHP

Aprenda como usar array_intersect_uassoc() no PHP para calcular interseções de arrays com comparação de chaves personalizada.

array_intersect_uassoc() calcula a interseção de dois ou mais arrays — ela retorna as entradas do primeiro array cujo valor E chave também aparecem em todos os outros arrays. O que torna essa variante especial é o u no seu nome: você fornece um callback definido pelo usuário que decide quando duas chaves são consideradas iguais. Os valores ainda são comparados com a comparação embutida do PHP (solta, com conversão para string).

Esta página explica como a função funciona, apresenta um exemplo verificado e mostra quando utilizá-la em vez das outras variantes array_intersect_*.

Sintaxe

array_intersect_uassoc(
    array $array,
    array ...$arrays,
    callable $key_compare_func
): array
  • $array — o array a ser comparado; suas entradas aparecem no resultado.
  • ...$arrays — um ou mais arrays para comparar com o primeiro.
  • $key_compare_func — um callback que compara duas chaves. Ele deve retornar um inteiro menor que, igual a, ou maior que 0 quando a primeira chave é considerada menor que, igual a, ou maior que a segunda (o mesmo contrato de um comparador usort).

A função retorna um novo array contendo as entradas correspondentes de $array, preservando suas chaves originais.

Como funciona o callback de chave

Diferente de array_intersect_assoc(), que compara chaves com ===, esta função delega a comparação de chaves ao seu callback. Isso permite implementar regras de correspondência que o PHP não oferece nativamente — chaves sem diferenciação entre maiúsculas e minúsculas, chaves com espaços removidos ou ordenação conforme localidade.

Note a responsabilidade dividida: as chaves são comparadas pelo seu callback, mas os valores ainda são comparados pela própria função (de forma solta, como strings). Se você também precisar de uma comparação de valores personalizada, use array_uintersect_uassoc().

Exemplo

<?php

// The callback receives two keys and must return an int:
// 0 = equal, -1 = first is smaller, 1 = first is larger.
function compareKeys($key1, $key2) {
    if ($key1 === $key2) {
        return 0;
    }
    return ($key1 > $key2) ? 1 : -1;
}

$array1 = ["a" => "green", "b" => "brown", "c" => "blue", "red"];
$array2 = ["a" => "green", "yellow", "red"];

$result = array_intersect_uassoc($array1, $array2, "compareKeys");

print_r($result);

?>

Saída:

Array
(
    [a] => green
)

Apenas "a" => "green" sobrevive, pois é a única entrada cuja chave e valor aparecem em $array2:

  • "b" => "brown" e "c" => "blue" — as chaves não existem em $array2.
  • 0 => "red" em $array1 — o valor "red" existe em $array2, mas na chave 1, portanto as chaves (0 vs 1) não correspondem.

Quando usar

Utilize array_intersect_uassoc() quando precisar de uma interseção com reconhecimento de chave e as chaves exigirem lógica de correspondência personalizada. Um caso comum é a correspondência de cabeçalhos ou colunas sem diferenciação entre maiúsculas e minúsculas:

<?php

function ci_keys($k1, $k2) {
    return strcasecmp((string) $k1, (string) $k2);
}

$config   = ["Host" => "localhost", "Port" => 8080];
$expected = ["host" => "localhost", "PORT" => 8080];

print_r(array_intersect_uassoc($config, $expected, "ci_keys"));

?>

Isso mantém Host => localhost e Port => 8080 porque o callback trata Host/host e Port/PORT como a mesma chave, enquanto os valores ainda correspondem.

Funções relacionadas

FunçãoComparação de chaveComparação de valor
array_intersect()ignoradaembutida
array_intersect_assoc()===embutida
array_intersect_key()=== (somente chaves)ignorada
array_intersect_ukey()callback (somente chaves)ignorada
array_intersect_uassoc()callbackembutida
array_uintersect_uassoc()callbackcallback

Conclusão

array_intersect_uassoc() retorna as entradas do primeiro array cujo valor e chave aparecem em todos os outros arrays, permitindo que você controle a correspondência de chaves por meio de um callback definido pelo usuário. Use-a quando uma interseção associativa precisar de regras de chave flexíveis — como chaves sem diferenciação entre maiúsculas e minúsculas ou com espaços removidos — e lembre-se de que os valores ainda são comparados com a comparação embutida do PHP.

Prática

Prática
Qual é o objetivo da função array_intersect_uassoc() no PHP?
Qual é o objetivo da função array_intersect_uassoc() no PHP?
Was this page helpful?