web-dev-qa-db-ja.com

多次元配列で一意の値を取得する方法

私はオーバーフローとグーグルで多くのことを調べましたが、私の特定のケースでは結果が機能しません。

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

繰り返しますが、シリアル化などを試みましたが、各配列で単一のキーを使用して操作する場合の仕組みをよく理解していません。

私は可能な限り明確にしようとしました。私はそれが理にかなって願っています...

26
MaurerPower

非常に単純に思えます:すべての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);
58
deceze

Php> = 5.5では、 array_column を使用できます。

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

配列が$ holderと呼ばれると仮定します:

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

array_uniqueを経由するよりも少し効率的な方法だと思います。同じかもしれません。

4
Jorge Orpinel

これを試して

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

繰り返して、結果にarray_uniqueを適用するだけです:

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

こんにちは以下のコードを試して一意の値を取得し、その値を並べ替えてください

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

ありがとう

0
Er. Anurag Jain