2012-01-19 10 views
5

si tengo una matriz de esta manera:php - elementos de la eliminación de una matriz que tener valores duplicados en una clave especificada

Array (
    [0]=> 
    Array (
    ["id"]=> "1" 
    ["desc"]=> "desc 1" 
    ["type"]=> "T" 
    ["date"]=> "17-JAN-12" 
) 
    [1]=> 
    Array (
    ["id"]=> "2" 
    ["desc"]=> "desc 2" 
    ["type"]=> "P" 
    ["date"]=> "05-JAN-12" 
) 
    [2]=> 
    Array (
    ["id"]=> "1" 
    ["desc"]=> "desc 3" 
    ["type"]=> "P" 
    ["date"]=> "15-JAN-12" 
) 
    [3]=> 
    Array (
    ["id"]=> "3" 
    ["desc"]=> "desc 4" 
    ["type"]=> "P" 
    ["date"]=> "06-JAN-12" 
) 
    [4]=> 
    Array (
    ["id"]=> "2" 
    ["desc"]=> "desc 5" 
    ["type"]=> "T" 
    ["date"]=> "06-JAN-12" 
) 
) 

Quiero eliminar de ella los elementos que tiene valores duplicados en sólo la clave " id", y obtener:

Array (
    [0]=> 
    Array (
    ["id"]=> "1" 
    ["desc"]=> "desc 1" 
    ["type"]=> "T" 
    ["date"]=> "17-JAN-12" 
) 
    [1]=> 
    Array (
    ["id"]=> "2" 
    ["desc"]=> "desc 2" 
    ["type"]=> "P" 
    ["date"]=> "05-JAN-12" 
) 
    [2]=> 
    Array (
    ["id"]=> "3" 
    ["desc"]=> "desc 4" 
    ["type"]=> "P" 
    ["date"]=> "06-JAN-12" 
) 
) 

Gracias.

+2

Esta tarea no es tan difícil. ¿Has probado algo? –

+0

¿Cómo quieres manejar duplicados? Elija primero? ¿Promedio? ¿Suma? ¿Contar? – J0HN

+2

¿Qué elemento tomas si está duplicado? el primero –

Respuesta

6
$result = array(); 
foreach($array as $arr){ 
    if(!isset($result[$arr["id"]])){ 
     $result[$arr["id"]] = $arr; 
    } 
} 
2

parece que id es su clave primaria. por lo tanto, realice un ciclo a través de la matriz e inserte el elemento en la nueva matriz solo si id aún no existe.

$new_array = array(); 
foreach ($old_array as $entry) { 
    if (empty($new_array[$entry['id']])) $new_array[$entry['id']] = $entry; 
} 
$new_array = array_values($new_array); 

btw. la última línea es solo para reordenar las llaves en el arreglo final

Cuestiones relacionadas