La función array_diff de PHP
La función array_diff en PHP compara arrays y devuelve los valores presentes en el primero pero no en los demás.
La función array_diff en PHP es una función integrada que compara arrays y devuelve los valores presentes en el primero pero no en ninguno de los demás. Es útil cuando necesitas la diferencia de conjuntos entre listas — por ejemplo, comparar datos de una base de datos con valores enviados a través de un formulario, o encontrar qué elementos se eliminaron entre dos instantáneas de una lista.
Este capítulo explica cómo funciona array_diff, su sintaxis, cómo maneja las claves y la comparación de valores, y los errores comunes. Es parte del tema de arrays de PHP.
Cómo funciona array_diff
La función array_diff compara dos o más arrays y devuelve un nuevo array que contiene los valores presentes en el primer array pero en ninguno de los arrays siguientes. Hay dos puntos esenciales que debes entender:
- La comparación se basa en valores; las claves se ignoran. Solo se comparan los valores, pero las claves del primer array se conservan en el resultado (no se reindexan).
- Los valores se comparan como strings. Internamente PHP trata dos elementos como iguales cuando
(string) $a === (string) $b. Por lo tanto, el entero1y el string"1"se consideran el mismo valor.
Sintaxis
La sintaxis de la función array_diff es la siguiente:
Sintaxis de la función array_diff de PHP
array array_diff (array $array1, array $array2 [, array $... ]);El parámetro array1 es el primer array — aquel cuyos valores deseas conservar. El parámetro array2 (y cualquier array adicional) son los arrays con los que se compara. La función devuelve los valores de array1 que no se encuentran en ninguno de los otros arrays.
Ejemplos
Veamos algunos ejemplos de cómo puedes usar la función array_diff en tu código PHP.
Ejemplo PHP del uso de la función array_diff
Este código generará la siguiente salida:
Array ( [0] => 1 )Como puedes ver, la función array_diff ha devuelto el valor 1, que está presente en $array1 pero no en $array2. Ten en cuenta que la clave original (0) del primer array se conserva.
Ejemplo PHP con valores string (sensibilidad a mayúsculas y minúsculas)
Este código generará la siguiente salida:
Array ( [1] => Banana )En este ejemplo, la comparación de strings distingue entre mayúsculas y minúsculas. Como 'Banana' no coincide exactamente con 'banana', se devuelve como diferencia. La clave 1 (la posición original de Banana) se conserva en el resultado.
Comparación con múltiples arrays
Puedes pasar más de dos arrays. Un valor se conserva solo si está ausente en todos los demás arrays:
<?php
$array1 = [1, 2, 3, 4, 5];
$array2 = [2, 4];
$array3 = [5];
$result = array_diff($array1, $array2, $array3);
print_r($result);
?>Salida:
Array ( [0] => 1 [2] => 3 )Los valores 2 y 4 son eliminados por $array2, y 5 es eliminado por $array3, dejando 1 y 3 con sus claves originales.
Reindexar el resultado
Dado que las claves originales se conservan, el resultado puede tener huecos en sus claves numéricas. Si necesitas una lista indexada secuencialmente, envuelve la llamada en array_values():
<?php
$result = array_values(array_diff([1, 2, 3], [2]));
print_r($result);
?>Salida:
Array ( [0] => 1 [1] => 3 )Advertencia: comparación laxa basada en strings
Dado que los elementos se comparan como strings, los tipos mixtos pueden coincidir de manera inesperada:
<?php
$result = array_diff(['1', '2', 3], [1, 2]);
print_r($result);
?>Salida:
Array ( [2] => 3 )Aquí '1' coincide con 1 y '2' coincide con 2 (comparación de strings), por lo que solo queda 3. Los objetos y arrays como valores generan una advertencia, ya que no pueden convertirse a string de forma limpia.
Funciones relacionadas
array_diff solo compara valores. PHP ofrece variantes para diferentes necesidades:
array_diff_key()— compara claves en lugar de valores.array_diff_assoc()— compara tanto claves como valores.array_intersect()— lo opuesto: devuelve los valores presentes en todos los arrays.array_merge()— combina arrays en lugar de restarlos.
Conclusión
La función array_diff es una herramienta útil para comparar arrays y encontrar las diferencias entre ellos. Ya sea que trabajes con datos de una base de datos o simplemente compares listas de valores, la función array_diff puede ayudarte a encontrar de forma rápida y sencilla los valores que son únicos en un array. Al usar esta función en tu código PHP, puedes optimizar tu proceso de desarrollo y facilitar la búsqueda y el procesamiento de los datos que necesitas.