检查并返回重复数组php

时间:2010-08-10 14:28:11

标签: php arrays duplicates

我想检查我的数组是否有任何重复项并返回数组中的重复值。 我希望这个效率尽可能高。

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个位置

10 个答案:

答案 0 :(得分:62)

这将比array_diff快〜100倍

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

答案 1 :(得分:14)

您可以使用array_uniquearray_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];

        }

      }

    }    

  }