我想檢查我的數組是否有任何重複項並返回數組中的重複值。 我希望這樣做盡可能高效。檢查並返回重複數組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個位置長
我想檢查我的數組是否有任何重複項並返回數組中的重複值。 我希望這樣做盡可能高效。檢查並返回重複數組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個位置長
這將是〜100倍和array_diff快
$dups = array();
foreach(array_count_values($arr) as $val => $c)
if($c > 1) $dups[] = $val;
function returndup($array)
{
$results = array();
$duplicates = array();
foreach ($array as $item) {
if (in_array($item, $results)) {
$duplicates[] = $item;
}
$results[] = $item;
}
return $duplicates;
}
不是OP要求的。他們表示應該能夠返回多個價值。 – 2010-08-10 14:39:01
現在它返回一個重複數組。在第一篇文章中,沒有通知需要返回多個重複項,所以不要責怪我! – Ronn0 2010-08-10 14:43:39
實際上,有:「如果數組是數組(1,2,1,2,5); 它應該返回一個數組1,2」 – ToolmakerSteve 2016-09-24 18:05:24
可以使用array_unique
和array_diff_assoc
獲得原始陣列的沒有重複的差異,一個副本:
array_diff_assoc($arr, array_unique($arr))
function array_dup($ar){
return array_unique(array_diff_assoc($ar,array_unique($ar)));
}
應該這樣做。
除了秋葵的回答是:
function returndup($arr)
{
return array_diff_key($arr, array_unique($arr));
}
你可以這樣做:
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
做了一個非常快速的benckmark和對我來說你的方法只是出來比JAL的array_diff方法快兩倍,而不是快100倍。 – Dom 2015-05-10 18:38:43
擡頭。不適用於字符串。 – peter 2017-06-29 16:45:51