2010-08-10 88 views
18

我想檢查我的數組是否有任何重複項並返回數組中的重複值。 我希望這樣做盡可能高效。檢查並返回重複數組php

Example :$array = array(1,2,2,4,5) 
function returndup($array) should return 2 ; 

if array is array(1,2,1,2,5); 
it should return an array with 1,2 

而且初始陣列始終是5個位置長

回答

53

這將是〜100倍和array_diff快

$dups = array(); 
foreach(array_count_values($arr) as $val => $c) 
    if($c > 1) $dups[] = $val; 
+7

做了一個非常快速的benckmark和對我來說你的方法只是出來比JAL的array_diff方法快兩倍,而不是快100倍。 – Dom 2015-05-10 18:38:43

+1

擡頭。不適用於字符串。 – peter 2017-06-29 16:45:51

0
function returndup($array) 
{ 
    $results = array(); 
    $duplicates = array(); 
    foreach ($array as $item) { 
     if (in_array($item, $results)) { 
      $duplicates[] = $item; 
     } 

     $results[] = $item; 
    } 

    return $duplicates; 
} 
+0

不是OP要求的。他們表示應該能夠返回多個價值。 – 2010-08-10 14:39:01

+0

現在它返回一個重複數組。在第一篇文章中,沒有通知需要返回多個重複項,所以不要責怪我! – Ronn0 2010-08-10 14:43:39

+1

實際上,有:「如果數組是數組(1,2,1,2,5); 它應該返回一個數組1,2」 – ToolmakerSteve 2016-09-24 18:05:24

3
function array_dup($ar){ 
    return array_unique(array_diff_assoc($ar,array_unique($ar))); 
} 

應該這樣做。

1

除了秋葵的回答是:

function returndup($arr) 
{ 
    return array_diff_key($arr, array_unique($arr)); 
} 
3

你可以這樣做:

function showDups($array) 
{ 
    $array_temp = array(); 

    foreach($array as $val) 
    { 
    if (!in_array($val, $array_temp)) 
    { 
     $array_temp[] = $val; 
    } 
    else 
    { 
     echo 'duplicate = ' . $val . '<br />'; 
    } 
    } 
} 


$array = array(1,2,2,4,5); 
showDups($array); 

輸出:

duplicate = 2