2012-01-11 66 views
2

我如何檢查是否值在數組中是獨特的基於關鍵數值?下面是數組的輸出。我想刪除基於「id」鍵的重複值。如果你在下面檢查,除了「角色」值之外,第二個數組的第二個數組是相同的。正因爲如此,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 2012-01-11 20:40:32

+0

好的,你能告訴我們你想要陣列看起來如何? – redmoon7777 2012-01-11 20:40:52

+0

哪些副本被刪除? – webbiedave 2012-01-11 20:44:08

回答

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 2012-01-11 20:46:29

+0

這個工程...感謝大家的幫助....從未想過我會得到這麼多的回覆是這麼短的時間.... – 2012-01-11 21:32:01

+0

@BhaskarWankhede不客氣,那是什麼StackOverflow的是:) – TimWolla 2012-01-11 21:33:37

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