phpmultidimensional array删除重复

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

我有一个2d数组,如下所示:

Array ( [0] => Array ( [0] => dave [1] => jones [2] => c@bc ) [1] => Array ( [0] => john [1] => jones [2] => a@bc ) [2] => Array ( [0] => bruce [1] => finkle [2] => c@bc ) ) 

我想删除那些重复的电子邮件。 所以在上面的例子中,我想删除[] [0]或[] [2]。 我不担心检查名称或类似的东西,我只需要基于一个值重复数据删除子arrays。

目前我有这样的事情

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

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

一个使用数组索引唯一性的快速解决scheme:

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

注意1:从上面可以看出,使用电子邮件地址的最后一个匹配而不是第一个。 这可以通过replace第二行来改变

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

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

更简单的解决scheme。

 $unique = array_map('unserialize', array_unique(array_map('serialize', $array))); echo "<pre>"; print_r($unique); 

用户对array_unique()的评论对此有一些解决scheme。 例如

  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

 $array = array( array('dave','jones','c@b.c'), array('dave','jones','a@c.d'), array('dave','jones','c@b.c'), array('dave','jones','e@v.d'), array('dave','jones','a@c.d') ); $copy = $array; // create copy to delete dups from $usedEmails = array(); // used emails for( $i=0; $i<count($array); $i++ ) { if ( in_array( $array[$i][2], $usedEmails ) ) { unset($copy[$i]); } else { $usedEmails[] = $array[$i][2]; } } print_r($copy); 

我的主张:

 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; } 

用户SORT_REGULAR作为第二个参数。

 $uniqueArray = array_unique($array, SORT_REGULAR);