Cómo eliminar valores duplicados de una matriz multidimensional en PHP
¿Cómo puedo eliminar valores duplicados de una matriz multidimensional en PHP?
Matriz de ejemplo:
Array
(
[0] => Array
(
[0] => abc
[1] => def
)
[1] => Array
(
[0] => ghi
[1] => jkl
)
[2] => Array
(
[0] => mno
[1] => pql
)
[3] => Array
(
[0] => abc
[1] => def
)
[4] => Array
(
[0] => ghi
[1] => jkl
)
[5] => Array
(
[0] => mno
[1] => pql
)
)
Aceptado
Aquí hay otra manera. No se guardan variables intermedias.
Usamos esto para eliminar duplicados de resultados de una variedad de consultas superpuestas.
$input = array_map("unserialize", array_unique(array_map("serialize", $input)));
Desde 5.2.9 puedes usar array_unique()
si usas la SORT_REGULAR
bandera así:
array_unique($array, SORT_REGULAR);
Esto hace que la función compare elementos para determinar la igualdad como si $a == $b
estuvieran en uso, lo cual es perfecto para su caso.
Producción
Array
(
[0] => Array
(
[0] => abc
[1] => def
)
[1] => Array
(
[0] => ghi
[1] => jkl
)
[2] => Array
(
[0] => mno
[1] => pql
)
)
Sin embargo, tenga en cuenta que la documentación dice:
array_unique()
no está diseñado para funcionar en matrices multidimensionales.
De otra manera. También conservará las claves.
function array_unique_multidimensional($input)
{
$serialized = array_map('serialize', $input);
$unique = array_unique($serialized);
return array_intersect_key($input, $unique);
}
Tuve un problema similar pero encontré una solución que funciona al 100%.
<?php
function super_unique($array,$key)
{
$temp_array = [];
foreach ($array as &$v) {
if (!isset($temp_array[$v[$key]]))
$temp_array[$v[$key]] =& $v;
}
$array = array_values($temp_array);
return $array;
}
$arr="";
$arr[0]['id']=0;
$arr[0]['titel']="ABC";
$arr[1]['id']=1;
$arr[1]['titel']="DEF";
$arr[2]['id']=2;
$arr[2]['titel']="ABC";
$arr[3]['id']=3;
$arr[3]['titel']="XYZ";
echo "<pre>";
print_r($arr);
echo "unique*********************<br/>";
print_r(super_unique($arr,'titel'));
?>