W3docs

Função PHP Array Intersect_Assoc

A função array_intersect_assoc no PHP compara dois ou mais arrays e retorna apenas os elementos que coincidem em chave e valor em todos os arrays.

A função PHP array_intersect_assoc() compara dois ou mais arrays e retorna apenas as entradas que coincidem em chave e valor em todos os arrays. Ao contrário de array_intersect(), que ignora as chaves e analisa apenas os valores, array_intersect_assoc() mantém um par somente quando a mesma chave contém o mesmo valor em todos os arrays fornecidos. Isso a torna a ferramenta certa quando a posição ou o rótulo de um valor é tão importante quanto o próprio valor — por exemplo, comparar dois arrays de configuração ou duas linhas indexadas por nome de campo.

Esta página aborda a assinatura da função, como a comparação funciona de fato (incluindo um detalhe sutil sobre como os valores são comparados), vários exemplos executáveis, armadilhas comuns e funções relacionadas.

Sintaxe

array_intersect_assoc(array $array, array ...$arrays): array
  • $array — o array base. O resultado preserva suas chaves e tipos de valores.
  • ...$arrays — um ou mais arrays para comparar. É necessário passar pelo menos um.

A função retorna um novo array contendo cada par chave => valor do primeiro array cuja chave e valor também apareçam em todos os outros arrays.

Como funciona

array_intersect_assoc() percorre cada par chave => valor do primeiro array e busca a mesma chave em todos os outros arrays. Um par sobrevive apenas quando, para cada outro array, essa chave existe e seu valor é igual.

Um detalhe que confunde as pessoas: a comparação de valores não é estrita (===). Internamente, o PHP compara valores como strings, aproximadamente (string) $a === (string) $b. Portanto, 1 (int) corresponde a "1" (string) porque ambos resultam em "1" ao serem convertidos para string, mas false não corresponde a 0 (eles resultam em "" e "0", respectivamente). As chaves, como de costume nos arrays PHP, seguem as regras normais de chaves de array.

Exemplo básico

Aqui o único par compartilhado por ambos os arrays — mesma chave, mesmo valor — é "a" => "green":

php— editable, runs on the server

A saída deste código seria:

Array
(
    [a] => green
)

"b" é descartado porque os valores diferem (brown vs yellow), e "c" é descartado pelo mesmo motivo (blue vs red). O "red" simples em $array1 tem a chave inteira 0, que não existe em $array2, então também é excluído. Esta é a diferença em relação a array_intersect(), que teria correspondido red apenas pelo valor.

Comparando três ou mais arrays

Um par deve coincidir em todos os arrays para sobreviver. Adicionar um terceiro array restringe ainda mais o resultado:

<?php

$array1 = array("a" => "green", "b" => "brown", "c" => "blue");
$array2 = array("a" => "green", "b" => "yellow");
$array3 = array("a" => "green", "c" => "blue");
$result = array_intersect_assoc($array1, $array2, $array3);
print_r($result);

?>

Saída:

Array
(
    [a] => green
)

Apenas "a" => "green" aparece em todos os arrays. "c" => "blue" está ausente em $array2, por isso é descartado.

Armadilha: comparação de valores não estrita

Como os valores são comparados como strings, valores de tipos mistos podem corresponder de formas surpreendentes:

<?php

$a = array("id" => 1,   "active" => false);
$b = array("id" => "1", "active" => 0);

print_r(array_intersect_assoc($a, $b));

?>

Saída:

Array
(
    [id] => 1
)

id corresponde porque 1 e "1" resultam ambos em "1" ao serem convertidos para string. Mas active é descartado: false resulta em "" enquanto 0 resulta em "0", portanto não são iguais. Se você precisar de correspondência estrita com consciência de tipo, compare os arrays manualmente ou use array_uintersect_assoc() com um callback personalizado.

Quando usar

  • Comparar arrays associativos em que um valor só é significativo em sua chave específica — configurações, campos de formulário, estruturas semelhantes a linhas de banco de dados.
  • Encontrar as entradas comuns entre dois instantâneos dos mesmos dados indexados por chave.

Se você se importa apenas com valores correspondentes independentemente da chave, use array_intersect(). Se você se importa apenas com chaves correspondentes independentemente do valor, use array_intersect_key(). Para a operação oposta — entradas presentes no primeiro array mas não nos outros, comparadas por chave e valor — consulte array_diff_assoc().

Diagrama

Uma representação visual de como array_intersect_assoc() filtra os pares:

graph LR
A[Array 1: key-value pairs] -->|Compare keys & values| B[Array 2: key-value pairs]
B -->|Keep only matching pairs| C[Result Array]

Conclusão

array_intersect_assoc() retorna os pares chave => valor que são comuns a todos os arrays fornecidos, correspondendo tanto na chave quanto no valor (comparado de forma não estrita como string). Use-a quando tanto o rótulo quanto o valor de uma entrada precisam coincidir, e prefira array_intersect(), array_intersect_key() ou array_uintersect_assoc() quando precisar de correspondência apenas por valor, apenas por chave ou com correspondência personalizada estrita.

Prática

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