31

私はオーバーフローとグーグルで多くの周りを見回しました、しかし結果のどれも私の特定のケースのために働きません。

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

繰り返しますが、シリアル化などを試しましたが、各配列で単一のキーを使用して操作する場合に、それがどのように機能するかを完全には理解していません。

私はできるだけ明確にしようとしました。私はそれが理にかなっていることを願っています...

4

8 に答える 8

70

非常に単純に思えます: すべての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);
于 2012-05-02T06:06:22.007 に答える
41

PHP >= 5.5 では、array_columnを使用できます:

array_unique(array_column($holder, 'pid'));
于 2015-05-25T14:48:25.383 に答える
4

これを試して

foreach($arr as $key => $val) {
    $new_arr[] = $val['pid'];
}
$uniq_arr = array_unique($new_arr);
于 2012-05-02T06:08:11.900 に答える
4

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

foreach($holder as $yourValues){
    $pids[] = $yourValues['pid'];
}
$yourUniquePids = array_unique($pids);
于 2012-05-02T06:08:24.943 に答える
4

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

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

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

于 2015-02-11T23:43:30.727 に答える
1
$uniquearray = [];
    for($i=0;$i<count($assocarray);$i++){
        if(!in_array($assocarray[$i]['KEY'],$uniquearray)){
            $uniquearray[$i]= $assocarray[$i]['KEY'];
        }
}
于 2020-02-03T13:25:37.027 に答える
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;
}

ありがとう

于 2012-05-02T06:30:04.183 に答える