2009-12-07 102 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作爲第二個參數。

​​