W3docs

Guia Completo da Função PHP array_uintersect_assoc

Aprenda como o PHP array_uintersect_assoc() calcula a interseção de arrays com verificação de índice e um callback de comparação de valores definido pelo usuário.

array_uintersect_assoc() calcula a interseção de dois ou mais arrays com uma verificação adicional de índice, onde os valores são comparados por um callback fornecido por você, mas as chaves são comparadas com a comparação embutida (não estrita). Ela retorna as entradas do primeiro array cuja chave e valor também aparecem em todos os outros arrays.

O "u" no nome significa comparação de valor definida pelo usuário; o sufixo _assoc significa as chaves também são verificadas. Portanto, um elemento sobrevive apenas quando ambas as condições são verdadeiras:

  • sua chave existe em todos os outros arrays (comparada pela comparação padrão do PHP), e
  • seu callback indica que seu valor é igual ao elemento correspondente em todos os outros arrays.

Isso o torna o primo mais rigoroso de array_intersect(), que ignora chaves e usa comparação de string. Use array_uintersect_assoc() quando a correspondência de chaves importa e você precisa de correspondência de valores personalizada — por exemplo, correspondência sem distinção de maiúsculas e minúsculas, comparação de objetos ou correspondência de números com tolerância.

Sintaxe

array_uintersect_assoc(array $array1, array $array2, ...$arrays, callable $value_compare_func): array

O callback é sempre o último argumento. Tudo antes dele é um array a ser intersectado.

Parâmetros

ParâmetroDescrição
$array1O array base. As chaves e valores deste array são preservados no resultado.
$array2, ...Um ou mais arrays para comparar com $array1.
$value_compare_funcUm callback que compara dois valores e retorna um inteiro.

Valor de retorno

Um array associativo contendo cada entrada de $array1 cuja chave está presente em todos os outros arrays e cujo valor o callback considera igual em todos eles. As chaves são preservadas de $array1.

A função de callback

O callback recebe dois valores e deve retornar um inteiro que os ordena, exatamente como as funções de comparação usadas por usort():

  • 0 quando os dois valores são considerados iguais,
  • um número negativo (< 0) quando o primeiro é "menor que" o segundo,
  • um número positivo (> 0) quando o primeiro é "maior que" o segundo.

Dois valores são tratados como correspondência apenas quando o callback retorna 0. Funções embutidas como strcasecmp() (comparação de string sem distinção de maiúsculas e minúsculas) e strcmp() já seguem esse contrato, por isso podem ser passadas diretamente.

Exemplos

Exemplo 1: Interseção básica em três arrays

php— editable, runs on the server

Saída:

Array
(
    [c] => cherry
)

Apenas c => cherry sobrevive. apple está em $array1 e $array3, mas ausente de $array2; banana está em $array1 e $array2, mas ausente de $array3. Apenas cherry aparece sob a mesma chave c nos três arrays, então é a única correspondência. Observe que a chave c é preservada de $array1.

Exemplo 2: Correspondência de valores sem distinção de maiúsculas e minúsculas

php— editable, runs on the server

Saída:

Array
(
    [c] => Cherry
)

Os valores diferem em capitalização entre os arrays (Cherry vs cherry), mas como strcasecmp compara sem distinção de maiúsculas e minúsculas, o callback ainda os reporta como iguais. O resultado mantém o valor como aparece em $array1 (Cherry).

Exemplo 3: Por que a verificação de índice importa

A parte "assoc" é mais fácil de visualizar quando o mesmo valor está sob chaves diferentes:

<?php

$array1 = array('x' => 'red', 'y' => 'green', 'z' => 'blue');
$array2 = array('x' => 'red', 'w' => 'green', 'z' => 'BLUE');

$result = array_uintersect_assoc($array1, $array2, "strcasecmp");

print_r($result);

?>

Saída:

Array
(
    [x] => red
    [z] => blue
)

red corresponde porque compartilha a chave x em ambos os arrays. blue/BLUE corresponde porque compartilham a chave z e strcasecmp ignora a capitalização. Mas green é descartado: está sob a chave y no primeiro array e a chave w no segundo, então as chaves não se alinham. Se você usasse o simples array_uintersect() aqui, green seria incluído porque as chaves seriam ignoradas.

Funções relacionadas

Conclusão

array_uintersect_assoc() mantém as entradas do primeiro array cuja chave aparece em todos os outros arrays e cujo valor o callback trata como igual em todos eles. Use-a quando as chaves são significativas e a correspondência de valores requer lógica personalizada. Se você também precisar controlar como as chaves são comparadas, use array_uintersect_uassoc(); se a comparação de valores por string for suficiente, o mais simples array_intersect_assoc() resolve o problema.

Prática

Prática
O que a função array_uintersect_assoc() no PHP faz?
O que a função array_uintersect_assoc() no PHP faz?
Was this page helpful?