2009-12-07 103 views
15

不知道这个问题是否需要删除重复,但我无法在其他地方找到答案,所以我会去问一问。php多维数组删除重复

我有一个二维数组,如下所示:

Array 
(
[0] => Array 
    (
     [0] => dave 
     [1] => jones 
     [2] => [email protected] 
    ) 

[1] => Array 
    (
     [0] => john 
     [1] => jones 
     [2] => [email protected] 

    ) 

[2] => Array 
    (
     [0] => bruce 
     [1] => finkle 
     [2] => [email protected] 
    ) 
) 

我想删除那些重复的电子邮件。所以在上面的例子中,我想删除[] [0]或[] [2]。我并不担心检查名称或类似的东西,我只需要根据单个值对子阵列进行重复数据删除。

目前,我有这样的事情

if(is_array($array) && count($array)>0){ 
    foreach ($array as $subarray) { 
    $duplicateEmail[$subarray[2]] = isset($duplicateEmail[$subarray[2]]); 
    unset($duplicateEmail[$subarray[2]]); 
    } 
    } 

,但它仅仅是不正确的。任何帮助赞赏。

+0

的可能重复(http://stackoverflow.com/questions/307674/how-to-remove-duplicate-values-from-a [如何从在PHP多维数组中删除重复的值] -multi-dimensional-array-in-php) – 2013-08-22 07:03:11

回答

25

它使用数组索引的唯一性的快速的解决方案:

$newArr = array(); 
foreach ($array as $val) { 
    $newArr[$val[2]] = $val;  
} 
$array = array_values($newArr); 

注意1:从上述中可见,提供电子邮件地址的最后一个匹配被用来代替第一。这可以通过更换第二行来更改

foreach (array_reverse($array) as $val) { 

注意2:结果数组中的索引有些混淆起来。但我想这没关系...

+0

你的'for'应该是'foreach',但是否则它运作良好,谢谢。 – 2009-12-08 10:06:43

+0

你是完全正确的,我改变了这一点。谢谢 – 2009-12-08 12:16:24

+0

@Cassy - 刚刚在一个我正在编写的应用程序中将它变成一个函数,感谢它! – Shackrock 2012-04-21 17:08:01

7

用户对array_unique()的评论有几个解决方案。例如

function multi_unique($array) { 
     foreach ($array as $k=>$na) 
      $new[$k] = serialize($na); 
     $uniq = array_unique($new); 
     foreach($uniq as $k=>$ser) 
      $new1[$k] = unserialize($ser); 
     return ($new1); 
    }

http://uk.php.net/manual/en/function.array-unique.php#57202

+3

它涵盖整个子阵列而不是单个值如果我没有弄错 – 2009-12-07 17:54:43

+0

+1解决复杂任务 – YsoL8 2010-03-12 21:43:42

12

更简单的解决方案。

$unique = array_map('unserialize', array_unique(array_map('serialize', $array))); 

echo "<pre>"; 
print_r($unique); 
+0

这并没有回答这个问题。这只是检查唯一的数组而不是它们的属性。感谢你给它另一个去。 – 2013-02-23 02:30:33

+0

良好的工作Dipesh – 2016-01-20 06:53:53

+0

@RishabhSeth很高兴它可以帮助你 – 2016-01-20 08:16:01

0

我的命题:

protected function arrayUnique($array, $preserveKeys = false) 
{ 
    $uniqueArray = array(); 
    $hashes = array(); 

    foreach ($array as $key => $value) { 
     if (true === is_array($value)) { 
      $uniqueArray[$key] = $this->arrayUnique($value, $preserveKeys); 

     } else { 
      $hash = md5($value); 

      if (false === isset($hashes[$hash])) { 
       if ($preserveKeys) { 
        $uniqueArray[$key] = $value; 
       } else { 
        $uniqueArray[] = $value; 
       } 

       $hashes[$hash] = $hash; 
      } 
     } 
    } 

    return $uniqueArray; 
} 
0

用户SORT_REGULAR作为第二个参数。

​​