2012-01-11 67 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