W3docs

Função Intersect do PHP: Um Guia para array_intersect

Aprenda a usar array_intersect() no PHP para encontrar valores comuns entre arrays com exemplos práticos e casos de uso.

A função array_intersect() compara dois ou mais arrays e retorna os valores que todos eles têm em comum. É uma das operações de conjunto de arrays mais úteis do PHP — muito prática quando você precisa responder "quais itens aparecem em todas as listas?", como encontrar tags compartilhadas, permissões em comum ou produtos que existem em dois catálogos.

Este capítulo aborda a sintaxe, como a comparação e a preservação de chaves funcionam na prática, as armadilhas que costumam pegar as pessoas (comparação solta, apenas valores sendo correspondidos) e exemplos executáveis.

Sintaxe

array_intersect(array $array, array ...$arrays): array
  • $array — o array cujos valores são verificados em relação a todos os outros.
  • ...$arrays — um ou mais arrays adicionais para comparar.

A função retorna um novo array contendo cada entrada do primeiro array cujo valor esteja presente em todos os outros arrays. Os arrays originais não são alterados.

Dois detalhes importantes para lembrar:

  • Apenas os valores são comparados, não as chaves. As chaves são ignoradas na correspondência, mas as chaves do primeiro array são preservadas no resultado.
  • A comparação é solta por padrão. Internamente, o PHP compara os elementos como strings: (string) $a === (string) $b. Portanto, o inteiro 1 e a string "1" são tratados como iguais. Use array_intersect_assoc() quando as chaves também precisam corresponder, ou array_intersect_key() para interseccionar por chaves em vez de valores.

Se algum argumento for um array vazio, o resultado será sempre vazio — nada pode ser comum a uma lista que não tem elementos.

Exemplos

Exemplo 1: Interseccionar dois arrays

Compare dois arrays e mantenha apenas os valores encontrados em ambos.

php— editable, runs on the server

Saída:

Array
(
    [2] => c
    [3] => d
)

"c" e "d" aparecem em ambos os arrays. Observe as chaves: 2 e 3 vêm de $array1, o primeiro argumento — array_intersect() mantém as chaves originais em vez de renumerá-las. Se você precisar de um índice limpo 0, 1, 2 …, envolva o resultado com array_values().

Exemplo 2: Interseccionar múltiplos arrays

Você pode passar qualquer número de arrays. Um valor só é mantido se aparecer em todos eles.

php— editable, runs on the server

Saída:

Array
(
)

O resultado é vazio: nenhum valor é compartilhado pelos três arrays. "c"/"d" estão ausentes em $array3, e "e"/"f" estão ausentes em $array1.

Exemplo 3: Armadilha da comparação solta

Como os elementos são comparados como strings, números e seus equivalentes em string se correspondem. Este é o comportamento que mais surpreende as pessoas.

<?php

$numbers = array(1, 2, 3, 4);
$strings = array("2", "4", "6");

$result = array_intersect($numbers, $strings);

print_r($result);

?>

Saída:

Array
(
    [1] => 2
    [3] => 4
)

O inteiro 2 correspondeu à string "2", e 4 correspondeu a "4" — mesmo sendo tipos diferentes. Os valores retornados vêm do primeiro array, portanto permanecem como inteiros aqui. Se a correspondência exata de tipo for importante, filtre o resultado manualmente ou compare com lógica mais estrita.

Quando usar

Recorra a array_intersect() quando quiser os valores comuns entre listas. Alguns casos práticos:

  • Encontrar papéis que um usuário possui em ambos os conjuntos de permissões.
  • Exibir produtos que existem em dois estoques de lojas.
  • Verificar quais campos solicitados são realmente permitidos (array_intersect($requested, $whitelist)).

Para a operação oposta — valores que não são compartilhados — veja array_diff(). Para combinar arrays em vez de interseccioná-los, use array_merge(), e para testar um único valor use in_array().

Conclusão

array_intersect() retorna os valores presentes em todos os arrays fornecidos, preservando as chaves do primeiro argumento e comparando os elementos de forma solta como strings. Lembre-se de recorrer a array_intersect_assoc() ou array_intersect_key() quando as chaves importam, e a array_values() quando quiser o resultado reindexado.

Prática

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