我想检查我的数组是否有任何重复项并返回数组中的重复值。 我希望这个效率尽可能高。
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个位置
答案 0 :(得分:62)
这将比array_diff快〜100倍
$dups = array();
foreach(array_count_values($arr) as $val => $c)
if($c > 1) $dups[] = $val;
答案 1 :(得分:14)
您可以使用array_unique
和array_diff_assoc
来获取原始数组和没有重复项的副本的区别:
array_diff_assoc($arr, array_unique($arr))
答案 2 :(得分:5)
function array_dup($ar){
return array_unique(array_diff_assoc($ar,array_unique($ar)));
}
应该做的伎俩。
答案 3 :(得分:4)
你可以这样做:
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
答案 4 :(得分:1)
function returndup($array)
{
$results = array();
$duplicates = array();
foreach ($array as $item) {
if (in_array($item, $results)) {
$duplicates[] = $item;
}
$results[] = $item;
}
return $duplicates;
}
答案 5 :(得分:1)
除了gumbo的回答:
function returndup($arr)
{
return array_diff_key($arr, array_unique($arr));
}
答案 6 :(得分:1)
我做了一些测试,实际上@ user187291的变体是最快的。但是,事实证明,@ Gumbo和@faebser的替代方案几乎一样快,@ faebser的速度仅比@Gumbo的略快,有时甚至更快。
这是我使用的代码
<pre>
答案 7 :(得分:0)
我发现了另一种在数组中返回重复项的方法
function printRepeating($arr, $size)
{
$i;
$j;
for($i = 0; $i < $size; $i++)
for($j = $i + 1; $j < $size; $j++)
if($arr[$i] == $arr[$j])
echo $arr[$i], " ";
}
printRepeating($array, sizeof($array,0);
答案 8 :(得分:0)
如果您需要一种适用于数组数组(或除整数或字符串以外的任何数组值)的解决方案,请尝试以下操作:
function return_dup( $arr ) {
$dups = array();
$temp = $arr;
foreach ( $arr as $key => $item ) {
unset( $temp[$key] );
if ( in_array( $item, $temp ) ) {
$dups[] = $item;
}
}
return $dups;
}
$arr = array(
array(
0 => 'A',
1 => 'B',
),
array(
0 => 'A',
1 => 'B',
),
array(
0 => 'C',
1 => 'D',
),
array(
0 => 'C',
1 => 'D',
),
array(
0 => 'E',
1 => 'F',
),
array(
0 => 'F',
1 => 'E',
),
array(
0 => 'Y',
1 => 'Z',
),
);
var_export( return_dup( $arr ) );
/*
array (
0 => array (
0 => 'A',
1 => 'B',
),
1 => array (
0 => 'C',
1 => 'D',
),
)
*/
答案 9 :(得分:-2)
$ duplicate_array = array();
for($i=0;$i<count($array);$i++){
for($j=0;$j<count($array);$j++){
if($i != $j && $array[$i] == $array[$j]){
if(!in_array($array[$j], $duplicate_array)){
$duplicate_array[] = $array[$j];
}
}
}
}