Función de intersección PHP: Guía de array_intersect
Aprende a usar array_intersect() en PHP para encontrar valores comunes entre dos o más arrays con ejemplos prácticos.
La función array_intersect() compara dos o más arrays y devuelve los valores que tienen en común. Es una de las operaciones de conjuntos de arrays más útiles de PHP — muy práctica cuando necesitas responder "¿qué elementos aparecen en todas las listas?", como encontrar etiquetas compartidas, permisos comunes o productos que existen en dos catálogos.
Este capítulo cubre la sintaxis, cómo funcionan realmente la comparación y la preservación de claves, los errores comunes que suelen confundir a las personas (comparación flexible, coincidencia solo por valores) y ejemplos ejecutables.
Sintaxis
array_intersect(array $array, array ...$arrays): array$array— el array cuyos valores se comprueban contra todos los demás....$arrays— uno o más arrays adicionales contra los que comparar.
La función devuelve un nuevo array que contiene cada entrada del primer array cuyo valor está presente en todos los demás arrays. Los arrays originales no se modifican.
Dos detalles clave a recordar:
- Solo se comparan los valores, no las claves. Las claves se ignoran al hacer la coincidencia, pero las claves del primer array se preservan en el resultado.
- La comparación es flexible por defecto. Internamente PHP compara los elementos como strings:
(string) $a === (string) $b. Por eso el entero1y el string"1"se tratan como iguales. Usaarray_intersect_assoc()cuando las claves también deban coincidir, oarray_intersect_key()para hacer la intersección por claves en lugar de valores.
Si algún argumento es un array vacío, el resultado siempre será vacío — nada puede ser común a una lista que no tiene elementos.
Ejemplos
Ejemplo 1: Intersección de dos arrays
Compara dos arrays y conserva solo los valores que aparecen en ambos.
Salida:
Array
(
[2] => c
[3] => d
)"c" y "d" aparecen en ambos arrays. Observa las claves: 2 y 3 provienen de $array1, el primer argumento — array_intersect() conserva las claves originales en lugar de renumerarlas. Si necesitas un índice limpio 0, 1, 2 …, envuelve el resultado en array_values().
Ejemplo 2: Intersección de múltiples arrays
Puedes pasar cualquier número de arrays. Un valor solo se conserva si aparece en todos ellos.
Salida:
Array
(
)El resultado está vacío: ningún valor es compartido por los tres arrays. "c"/"d" no están en $array3, y "e"/"f" no están en $array1.
Ejemplo 3: El error de la comparación flexible
Como los elementos se comparan como strings, los números y sus equivalentes en string coinciden. Este es el comportamiento que más sorprende a la gente.
<?php
$numbers = array(1, 2, 3, 4);
$strings = array("2", "4", "6");
$result = array_intersect($numbers, $strings);
print_r($result);
?>Salida:
Array
(
[1] => 2
[3] => 4
)El entero 2 coincidió con el string "2", y 4 coincidió con "4" — aunque son de tipos distintos. Los valores devueltos provienen del primer array, por lo que aquí siguen siendo enteros. Si la coincidencia exacta de tipos importa, filtra el resultado tú mismo o compara con lógica más estricta.
Cuándo usarla
Recurre a array_intersect() cuando quieras los valores comunes entre listas. Algunos casos prácticos:
- Encontrar los roles que un usuario tiene en ambos conjuntos de permisos.
- Mostrar productos que existen en dos inventarios de tiendas.
- Comprobar qué campos solicitados están realmente permitidos (
array_intersect($requested, $whitelist)).
Para la operación opuesta — valores que no son compartidos — consulta array_diff(). Para combinar arrays en lugar de intersectarlos, usa array_merge(), y para comprobar un único valor usa in_array().
Conclusión
array_intersect() devuelve los valores presentes en todos los arrays que le pases, preservando las claves del primer argumento y comparando los elementos de forma flexible como strings. Recuerda recurrir a array_intersect_assoc() o array_intersect_key() cuando las claves sean importantes, y a array_values() cuando quieras que el resultado tenga un índice secuencial.