2012-05-02 23 views
20

He revisado mucho el desbordamiento y en google, pero ninguno de los resultados funciona para mi caso específico.Cómo obtener un valor único en una matriz multidimensional

que tienen una matriz llamada $ marcador de posición titular, los valores de la siguiente manera:

Array ( 
    [0] => Array ( 
     [id] => 1 
     [pid] => 121 
     [uuid] => 1 
     ) 
    [1] => Array ( 
     [id] => 2 
     [pid] => 13 
     [uuid] => 1 
     ) 
    [2] => Array ( 
     [id] => 5 
     [pid] => 121 
     [uuid] => 1 
     ) 
    ) 

estoy tratando de sacar valores distintos/únicos de esta matriz multidimensional. El resultado final me gustaría es o bien una variable que contiene (13121), o (preferiblemente) una matriz como sigue: Array ( [0] => 13 [1] => 121 )

Nuevamente I' He intentado serializar y tal, pero no entiendo cómo funciona eso cuando se opera con una sola clave en cada matriz.

Traté de ser lo más claro posible. Espero que tiene sentido ...

+0

posible duplicar [PHP eliminar valores duplicados de una matriz multidimensional] (http: // stackoverflow.com/questions/3598298/php-remove-duplicate-values-from-multidimensional-array) – nu6A

Respuesta

43

parece bastante sencilla: extraer todos pid valores en su propia matriz, ejecute a través de array_unique:

$uniquePids = array_unique(array_map(function ($i) { return $i['pid']; }, $holder)); 

Lo mismo en escritura a mano:

$pids = array(); 
foreach ($holder as $h) { 
    $pids[] = $h['pid']; 
} 
$uniquePids = array_unique($pids); 
+1

Me pregunto por qué esto no funciona 'array_unique (array_map (function ($ i) {return $ i [$ id]; }, $ holder)); '¿Hay alguna forma de usar la variable en lugar de un nombre de clave predefinido? –

+0

@Ilia Ver http://stackoverflow.com/a/16959577/476 – deceze

+0

@deceze Ah, está bien, está dentro de la función anónima. ¡Gracias! –

2

intenta esto

foreach($arr as $key => $val) { 
    $new_arr[] = $val['pid']; 
} 
$uniq_arr = array_unique($new_arr); 
2

Simplemente itera sobre él y aplica un array_unique en el resultado:

foreach($holder as $yourValues){ 
    $pids[] = $yourValues['pid']; 
} 
$yourUniquePids = array_unique($pids); 
0

Hola Inténtelo código dado a continuación para obtener valores únicos y luego ordenar que valora

<?php 

$sort_arr = unique_sort($holder, 'pid'); 
echo "<pre>"; 
print_r($sort_arr); 
echo"</pre>"; 

/*function for get unique value then sort them*/ 

function unique_sort($arrs, $id) { 
    $unique_arr = array(); 
    foreach ($arrs AS $arr) { 

     if (!in_array($arr[$id], $unique_arr)) { 
      $unique_arr[] = $arr[$id]; 
     } 
    } 
    sort($unique_arr); 
    return $unique_arr; 
} 

gracias

1

Suponiendo que la matriz se llama $ titular:

$unique = array(); 
foreach($holder as $h) 
    if(! in_array($h, $unique)) 
     $unique[] = $h; 

es una forma un poco más eficiente que a través de array_unique, creo. Puede ser lo mismo

+0

'in_array' es esencialmente un bucle sobre la matriz una y otra vez, por lo que tiene dos bucles anidados. Eso es ineficiente a su manera. – deceze

14

en PHP> = 5.5 se puede utilizar array_column:

array_unique(array_column($holder, 'pid')); 
+0

Creo que es la mejor manera de hacerlo. –

-1

fo mi situación i utilizar este método

//get some data from db to array 
while ($row = mysqli_fetch_assoc($query)){ 
    $data[] = $row; 
} 

//display unique value 
echo "<table>"; 
$uniq = array(); 
foreach ($data as $row) { 
    if(!in_array($row['path'], $uniq)) { 
     $uniq[] = $row['path']; 
     echo "<tr>"; 
     echo "<td>"; 
     echo $row['path']; 
     echo "</td>"; 
     echo "<td>"; 
     echo $row['relationship_id']; 
     echo "</td>"; 
     echo "</tr>"; 
    } 
} 
echo "</table>"; 
+0

No veo cómo responde eso a la pregunta: que está obteniendo un valor único en una matriz multidimensional – goto

Cuestiones relacionadas