web-dev-qa-db-fra.com

Comment obtenir une valeur unique dans un tableau multidimensionnel

J'ai beaucoup regardé autour du débordement et de Google, mais aucun des résultats ne fonctionne dans mon cas particulier.

J'ai un tableau d'espaces réservés appelé $ holder, dont les valeurs sont les suivantes:

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

J'essaie d'extraire des valeurs distinctes/uniques de ce tableau multidimensionnel. Le résultat final souhaité est soit une variable contenant (13,121), soit (de préférence) un tableau comme suit: Array ( [0] => 13 [1] => 121 )

Encore une fois, j'ai essayé la sérialisation, etc., mais je ne comprends pas très bien comment cela fonctionne lorsque vous utilisez une clé unique dans chaque tableau.

J'ai essayé d'être aussi clair que possible. J'espère que ça a du sens...

25
MaurerPower

Cela semble assez simple: extraire toutes les valeurs pid dans leur propre tableau, exécutez-le à travers array_unique:

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

La même chose à la longue:

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

Dans php> = 5.5, vous pouvez utiliser array_column :

array_unique(array_column($holder, 'pid'));
26
Dondi Imperial

essaye ça

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

Il suffit de le parcourir et d'appliquer un array_unique sur le résultat:

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

En supposant que votre tableau s'appelle $ holder:

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

est un moyen légèrement plus efficace que via array_unique, je crois. Peut être le même.

2
Jorge Orpinel

Bonjour, essayez le code ci-dessous pour obtenir des valeurs uniques, puis triez ces valeurs.

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

merci

0
Er. Anurag Jain