唯一PHP数组

唯一PHP数组,php,arrays,Php,Arrays,如何根据键值检查数组中的值是否唯一?下面是阵列的输出。我想删除基于“id”键的重复值。如果选中下面的复选框,则第二个和第三个数组除了“角色”值之外是相同的。因此,array_unique无法在此阵列上工作 array 0 => array 'id' => string '1521422' (length=7) 'name' => string 'David Alvarado' (length=14) 'role' => s

如何根据键值检查数组中的值是否唯一?下面是阵列的输出。我想删除基于“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)
试试这个:

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

基本上,您希望实现一个
数组_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);
}

基本上,您希望实现一个变体
array\u 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);
}
您可以使用以下代码:

// 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
您可以使用以下代码:

// 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

你不能在数据库级别上解决这个问题吗?好的,你能告诉我们你想要数组的外观吗?哪些副本被删除了?你不能在数据库级别上解决这个问题吗?好的,你能告诉我们你想要数组的外观吗?哪些副本被删除了?我非常喜欢这个解决方案,因为每个条目只存储一次密钥+1此作品…感谢所有人的帮助…虽然我不会在这么短的时间内收到这么多回复…@BhaskarWankhede不客气,这就是StackOverflow的作用:)我非常喜欢此解决方案,因为您只为每个条目存储一次密钥+1本作品……感谢大家的帮助……虽然我不会在这么短的时间内收到这么多回复……@BhaskarWankhede不客气,这就是StackOverflow的作用:)