独特的PHP数组

时间:2012-01-11 20:38:05

标签: php arrays

如何根据键值检查数组中的值是否唯一?下面是阵列的输出。我想根据" id"删除重复值。键。如果您在下面查看,那么第二个&第三个数组是相同的,除了"角色"值。因此,array_unique不能在这个数组上工作。

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)

3 个答案:

答案 0 :(得分: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(因为闭包和静态语句)。

比照http://php.net/manual/en/function.array-filter.php了解更多信息。我在循环中测试了语句,它也适用于那里。

答案 1 :(得分: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);
}

答案 2 :(得分: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