Подтвердить что ты не робот

Проверка и возврат дубликатов массива 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 позиций длиной

4b9b3361

Ответ 1

это будет ~ 100 раз быстрее, чем array_diff

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

Ответ 2

Вы можете получить разницу между исходным массивом и копией без дубликатов, используя array_unique и array_diff_assoc:

array_diff_assoc($arr, array_unique($arr))

Ответ 3

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

Должен сделать трюк.

Ответ 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

Ответ 5

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

        $results[] = $item;
    }

    return $duplicates;
}

Ответ 6

в дополнение к gumbo-ответу:

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

Ответ 7

    $someValues = [1, 2, 2, 3, 5, 1, 5, 6];
    $duplicate = [];
    for ($i=0; $i < count($someValues); $i++) { 
        if (in_array($someValues[$i], $someValues)) {
            $duplicate[] = $someValues[$i];
        }
    }
    print_r($duplicate);

Вывод: Array ( [0] => 1 [1] => 2 [2] => 2 [3] => 3 [4] => 5 [5] => 1 [6] => 5 [7] => 6 )

Ответ 8

Я нашел другой способ вернуть дубликаты в массиве

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);