2012-01-11 16 views
2

値がキー値に基づいて配列内で一意であるかどうかを確認するにはどうすればよいですか?以下は配列の出力です。私は "ID"キーに基づいて重複値を削除したい。以下を確認すると、2番目の&の3番目の配列は、 "role"値を除いて同じです。このため、array_uniqueはこの配列では動作しません。ユニークなPHP配列

array 
    0 => 
    array 
     'id' => string '1521422' (length=7) 
     'name' => string 'David Alvarado' (length=14) 
     'role' => string 'associate producer ' (length=20) 
    1 => 
    array 
     'id' => string '0098210' (length=7) 
     'name' => string 'Cristian Bostanescu' (length=19) 
     'role' => string 'line producer: Romania (as Cristi Bostanescu)' (length=46) 
    2 => 
    array 
     'id' => string '1266015' (length=7) 
     'name' => string 'Bruno Hoefler' (length=13) 
     'role' => string 'co-producer ' (length=13) 
    3 => 
    array 
     'id' => string '1266015' (length=7) 
     'name' => string 'Bruno Hoefler' (length=13) 
     'role' => string 'executive producer ' (length=20) 
    4 => 
    array 
     'id' => string '1672379' (length=7) 
     'name' => string 'Alwyn Kushner' (length=13) 
     'role' => string 'associate producer ' (length=20) 
+1

は、データベースレベルでこれを解決することができませんか? – kapa

+0

OKアレイの外観をどのように表示することができますか? – redmoon7777

+0

削除される重複はどれですか? – webbiedave

答えて

3

この方法を試してください。

<?php 
$array = array(
    array('id' => 1, 'text' => 'a'), 
    array('id' => 2, 'text' => 'b'), 
    array('id' => 1, 'text' => 'c'), 
    array('id' => 3, 'text' => 'd') 
); 
$array = array_filter($array, function ($item) { 
    static $found = array(); 
    if (isset($found[$item['id']])) return false; 
    $found[$item['id']] = true; 
    return true; 
}); 

var_dump($array); 

これは、(理由は閉鎖と静的文の)PHP 5.3のように動作します。

cf.詳細についてはhttp://php.net/manual/en/function.array-filter.phpをご覧ください。私はループ内のステートメントをテストし、それもそこで動作します。

+1

私はこの解決策が大好きです。なぜなら、あなたは各エントリーごとに一度だけキーを保管しているからです。 +1 – knittl

+0

これはうまくいきます...助けてくれてありがとうございました....決して非常に多くの返事がかかる短時間ですが、決してありません.... –

+0

@BhaskarWankhedeあなたは歓迎です、何のためのStackOverflowがあります:) – TimWolla

1

基本的にはあなたが何をしたいんarray_uniqueのバリエーションを実装する:

function array_unique_multi($arr,$key='id') { 
    // $arr is the array to work on 
    // $key is the key to make unique by 
    $ret = Array(); 
    foreach($arr as $v) { 
     if(!isset($ret[$v[$key]])) $ret[$v[$key]] = $k; 
    } 
    return array_values($ret); 
} 
0

あなたはこのコードを使用することができます:

// assuming $arr is your original array 
$narr = array(); 
foreach($arr as $key => $value) { 
    //$narr[json_encode($value)] = $key; 
    if (!array_key_exists($value["id"], $narr)) 
     $narr[$value["id"]] = $key; 
} 
$narr = array_flip($narr); 
foreach($arr as $key => $value) { 
    if (!array_key_exists($key, $narr)) 
     unset($arr[$key]); 
} 
print_r($arr); // will have no duplicates