2012-05-02 4 views
20

Я много размышлял о переполнении и в google, но ни один из результатов не работает для моего конкретного случая.Как получить уникальное значение в многомерном массиве

У меня есть массив заполнителя под названием $ держатель, значения следующим образом:

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 
     ) 
    ) 

Я пытаюсь вытащить отдельные/уникальные значения из этого многомерного массива. Конечный результат Я хотел бы либо переменная, содержащая (13121), или (предпочтительно) массив следующим образом: Array ( [0] => 13 [1] => 121 )

Опять я вы пробовали сериализацию и т. д., но не совсем понимаете, как это работает при работе с одним ключом в каждом массиве.

Я старался быть как можно более ясным. Я надеюсь, что это имеет смысл ...

+0

возможное дублирование [PHP удалить повторяющиеся значения из многомерного массива] (HTTP: // stackoverflow.com/questions/3598298/php-remove-duplicate-values-from-multidimensional-array) – nu6A

ответ

43

Кажется довольно проста: извлечь все pid значения в их собственном массиве, запустить его через array_unique:

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

То же самое в обычном письме:

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

Интересно, почему это не работает 'array_unique (array_map (function ($ i) {return $ i [$ id]; }, $ holder)); 'Есть ли способ использовать переменную вместо предопределенного имени ключа? –

+0

@Ilia Посмотреть http://stackoverflow.com/a/16959577/476 – deceze

+0

@deceze Ах, хорошо, это внутри анонимной функции. Благодаря! –

2

попробуйте это

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

Просто переверните его и примените array_unique на результат:

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

Привет Пожалуйста, попробуйте Приведенный ниже код для получения уникальных значений, а затем сортировать, что ценности

<?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; 
} 

благодаря

1

Предположим, что ваш массив называется $ держатель:

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

- это несколько более эффективный способ, чем через array_unique, я считаю. Может быть то же самое.

+0

'in_array' по существу перебирает массив снова и снова, поэтому у вас есть два вложенных цикла. Это неэффективно по-своему. – deceze

14

В PHP> = 5.5 вы можете использовать array_column:

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

Я думаю, что это лучший способ сделать это. –

-1

Fo моей ситуации я использую этот метод

//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

Я не вижу, как это отвечает на вопрос: он получает уникальное значение в многомерном массиве – goto

Смежные вопросы