Подтвердить что ты не робот

Как получить уникальное значение в многомерном массиве

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

У меня есть массив заполнителей, называемый $holder, значения следующие:

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

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

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

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

4b9b3361

Ответ 1

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

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

То же самое в longhand:

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

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

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

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

Ответ 5

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

$unique = array();
foreach( $holder as $h )
    if( ! in_array($h, $unique ) )
        $unique[] = $h;
Я считаю, что

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

Ответ 6

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

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

спасибо

Ответ 7

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

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