Dominando a Função PHP array_uintersect_uassoc
Aprenda a usar PHP array_uintersect_uassoc para calcular interseções de arrays com callbacks personalizados de comparação de valores e chaves, com exemplos.
PHP é uma linguagem poderosa com diversas funções, e array_uintersect_uassoc é uma das funções mais versáteis da biblioteca de funções de array do PHP. Essa função permite calcular a interseção de arrays com funções de comparação de chaves definidas pelo usuário.
Se você está procurando uma maneira de comparar dois arrays e obter os valores que existem em todos eles, então a função array_uintersect_uassoc é o que você precisa. Essa função oferece a flexibilidade de comparar arrays com funções de comparação personalizadas, tornando-a uma ferramenta valiosa para qualquer desenvolvedor PHP.
Aqui está uma visão geral detalhada da função array_uintersect_uassoc, junto com alguns exemplos para ajudá-lo a entender como ela funciona.
O que é a Função array_uintersect_uassoc?
A função array_uintersect_uassoc é uma função nativa do PHP usada para calcular a interseção de arrays usando funções de comparação definidas pelo usuário para dados e chaves. Essa função compara os valores de dois arrays e retorna os valores que existem em todos eles, desde que suas chaves também correspondam de acordo com a função de comparação de chaves.
Uma das principais características da função array_uintersect_uassoc é sua capacidade de comparar arrays usando funções de comparação de chaves e valores definidas pelo usuário. Isso significa que você pode personalizar a lógica de comparação para atender às suas necessidades específicas.
Como Usar a Função array_uintersect_uassoc
A função array_uintersect_uassoc aceita dois ou mais arrays seguidos de dois callbacks — o último argumento é sempre o callback de comparação de chaves, e o anterior é o callback de comparação de valores. Aqui está a sintaxe:
Sintaxe da função PHP array_uintersect_uassoc
array_uintersect_uassoc(
array $array1,
array $array2,
array ...$arrays,
callable $value_compare_func,
callable $key_compare_func
): arrayParâmetros:
array1: O array base. Os valores que sobrevivem à comparação são extraídos daqui, com suas chaves originais preservadas.array2,...$arrays: Um ou mais arrays para comparar comarray1.value_compare_func: Um callback para comparar valores. Recebe dois valores e deve retornar um inteiro menor que, igual a, ou maior que0— exatamente como um comparador de ordenação. Retornar0significa "igual".key_compare_func: Um callback para comparar chaves, com o mesmo contrato de retorno de três vias.
Valor de Retorno:
Retorna um array contendo cada entrada de array1 cujo valor e chave correspondam a uma entrada em cada um dos outros arrays. Um elemento sobrevive apenas quando ambos os callbacks retornam 0 em relação a algum elemento em todos os outros arrays.
Como ambos os callbacks seguem o contrato padrão <=> (spaceship), retornar 1 ou -1 simplesmente informa ao PHP que os elementos não são iguais — apenas 0 conta como correspondência.
Vamos ver um exemplo de como usar a função array_uintersect_uassoc para comparar dois arrays:
PHP Use a função array_uintersect_uassoc para comparar dois arrays
<?php
function compare_data($a, $b)
{
if ($a === $b) {
return 0;
}
return ($a > $b) ? 1 : -1;
}
function compare_keys($a, $b)
{
if ($a === $b) {
return 0;
}
return ($a > $b) ? 1 : -1;
}
$array1 = ["a" => "green", "b" => "brown", "c" => "blue", "d" => "red"];
$array2 = ["a" => "green", "b" => "yellow", "blue", "d" => "red"];
$result = array_uintersect_uassoc($array1, $array2, "compare_data", "compare_keys");
print_r($result);
?>No exemplo acima, primeiro definimos duas funções de comparação personalizadas para dados e chaves, e depois definimos dois arrays que queremos comparar. Em seguida, chamamos a função array_uintersect_uassoc com os dois arrays e as duas funções de comparação como argumentos.
A função array_uintersect_uassoc retorna um array que contém os valores que existem em ambos os arrays. Neste exemplo, o resultado seria:
Array
(
[a] => green
[d] => red
)Por que apenas a e d? Um elemento sobrevive apenas quando tanto sua chave quanto seu valor correspondem.
[a] => greencorresponde: a chaveae o valorgreenexistem em ambos os arrays. Mantido.[b] => browné descartado: a chavebexiste em ambos, mas os valores (brownvsyellow) diferem.[c] => blueé descartado:array1o possui sob a chavec, masarray2armazenabluesob a chave numérica auto-atribuída0, portanto as chaves não correspondem.[d] => redcorresponde: a chavede o valorredexistem em ambos. Mantido.
Esse último caso é exatamente o que separa essa função da interseção apenas por valor: mesmo quando um valor está presente em ambos os arrays, uma chave incompatível o remove.
Nota: O exemplo usa funções nomeadas para ampla compatibilidade, mas o PHP moderno (7.4+) suporta arrow functions concisas (por exemplo,
fn($a, $b) => $a <=> $b). Escolha a sintaxe que se alinha aos requisitos de versão do PHP do seu projeto.
Quando usar esta função
Use array_uintersect_uassoc quando todas as três condições forem verdadeiras: você precisa de uma interseção, as chaves são significativas (dados associativos), e os valores ou as chaves precisam de lógica de comparação personalizada (strings sem distinção de maiúsculas e minúsculas, objetos, ordenação por localidade, tolerância em floats, etc.). Se você precisar apenas de uma dessas, uma alternativa mais simples é mais adequada:
array_intersect— apenas valores, comparação nativa.array_intersect_assoc— chave e valor, comparação nativa.array_uintersect— apenas valores, callback de valor personalizado.array_uintersect_assoc— callback de valor personalizado, comparação de chave nativa.array_intersect_uassoc— comparação de valor nativa, callback de chave personalizado.
Consulte o capítulo PHP Arrays para uma visão mais ampla sobre como trabalhar com arrays.
Um Exemplo Real: Correspondência sem Distinção de Maiúsculas e Minúsculas
O primeiro exemplo usou comparadores estritos, portanto se comporta como o array_intersect_assoc nativo. O verdadeiro poder aparece quando os callbacks fazem algo que os nativos não conseguem — aqui, correspondendo chaves e valores independentemente das maiúsculas e minúsculas:
<?php
$inventory = ["Apple" => "RED", "Banana" => "yellow", "Cherry" => "dark-red"];
$catalog = ["apple" => "red", "banana" => "GREEN", "cherry" => "DARK-RED"];
$result = array_uintersect_uassoc(
$inventory,
$catalog,
fn($a, $b) => strcasecmp($a, $b), // compare values, ignoring case
fn($a, $b) => strcasecmp($a, $b) // compare keys, ignoring case
);
print_r($result);
?>strcasecmp retorna 0 quando duas strings são iguais ignorando maiúsculas e minúsculas, portanto se encaixa diretamente no contrato do comparador. O resultado mantém entradas de $inventory cuja chave e valor correspondem a $catalog sem distinção de maiúsculas e minúsculas:
Array
(
[Apple] => RED
[Cherry] => dark-red
)Banana é excluído porque, embora as chaves correspondam, os valores (yellow vs GREEN) diferem mesmo ignorando maiúsculas e minúsculas. Um simples array_intersect_assoc não teria correspondido nenhum desses, porque sua comparação nativa é sensível a maiúsculas e minúsculas.
Benefícios de Usar a Função array_uintersect_uassoc
Existem vários benefícios em usar a função array_uintersect_uassoc em seus projetos PHP. Aqui estão alguns dos principais benefícios do uso desta função:
1. Correspondência Precisa de Chave-Valor
Ao contrário de array_uintersect, esta função garante que apenas elementos com chaves e valores correspondentes sejam retornados. Isso evita falsos positivos ao comparar arrays associativos onde as chaves carregam significado semântico.
2. Lógica de Comparação Personalizada
Você pode definir regras de igualdade precisas tanto para valores quanto para chaves, lidando com tipos de dados complexos ou requisitos de ordenação personalizada que os operadores nativos não conseguem cobrir.
3. Desempenho Nativo
Implementada em C dentro do núcleo do PHP, executa eficientemente para operações de array padrão sem dependências externas, tornando-a adequada para conjuntos de dados de tamanho moderado.
Dicas para Usar a Função array_uintersect_uassoc
Aqui estão algumas dicas para usar a função array_uintersect_uassoc em seus projetos PHP:
1. Defina Funções de Comparação Personalizadas
Para aproveitar ao máximo a função array_uintersect_uassoc, é essencial definir funções de comparação personalizadas. Isso permitirá que você personalize a lógica de comparação para atender às necessidades específicas do seu projeto.
2. Use Comparação com Segurança de Tipos
Ao definir suas funções de comparação personalizadas, é importante usar operadores de comparação com segurança de tipos. Isso garantirá que a comparação seja feita nos tipos de dados corretos, o que melhorará a precisão dos resultados.
3. Teste Suas Funções de Comparação
Antes de usar suas funções de comparação personalizadas em produção, é importante testá-las completamente. Isso ajudará a identificar quaisquer bugs ou problemas e garantir que sua lógica de comparação esteja funcionando corretamente.
Conclusão
Neste artigo, exploramos a função array_uintersect_uassoc no PHP. Essa função é uma ferramenta poderosa para comparar arrays e encontrar os valores que existem em todos eles. Ao usar funções de comparação personalizadas para dados e chaves, você pode personalizar a lógica de comparação para atender às necessidades específicas do seu projeto.
Se você está buscando elevar suas habilidades em PHP ao próximo nível, dominar a função array_uintersect_uassoc é um ótimo ponto de partida. Com sua flexibilidade e versatilidade, essa função é uma ferramenta essencial para qualquer desenvolvedor PHP.
Obrigado por ler nosso guia sobre a função array_uintersect_uassoc. Esperamos que tenha sido útil e informativo. Se você tiver alguma dúvida ou feedback, sinta-se à vontade para entrar em contato conosco.